{
  "version": 3,
  "sources": ["../src/index.ts", "../src/converter.ts", "../src/constants.ts", "../src/utils.ts"],
  "sourcesContent": ["import { useRef, useCallback } from \"react\";\nimport html2canvas from \"html2canvas\";\n\nimport Converter from \"./converter\";\nimport { Options, TargetElementFinder, UsePDFResult } from \"./types\";\nimport { buildConvertOptions } from \"./utils\";\nimport jsPDF from \"jspdf\";\nexport { Resolution, Margin } from \"./constants\";\nexport type { Options };\n\nconst getTargetElement = (\n  targetRefOrFunction: TargetElementFinder\n): HTMLElement | null | undefined => {\n  if (typeof targetRefOrFunction === \"function\") {\n    return targetRefOrFunction();\n  }\n  return targetRefOrFunction?.current;\n};\n\nexport const usePDF = (usePDFoptions?: Options): UsePDFResult => {\n  const targetRef = useRef();\n  const toPDF = useCallback(\n    (toPDFoptions?: Options): Promise<InstanceType<typeof jsPDF>> => {\n      return generatePDF(targetRef, usePDFoptions ?? toPDFoptions);\n    },\n    [targetRef, usePDFoptions]\n  );\n  return { targetRef, toPDF };\n};\n\nconst generatePDF = async (\n  targetRefOrFunction: TargetElementFinder,\n  customOptions?: Options\n): Promise<InstanceType<typeof jsPDF>> => {\n  const options = buildConvertOptions(customOptions);\n  const targetElement = getTargetElement(targetRefOrFunction);\n  if (!targetElement) {\n    console.error(\"Unable to get the target element.\");\n    return;\n  }\n  const canvas = await html2canvas(targetElement, {\n    useCORS: options.canvas.useCORS,\n    logging: options.canvas.logging,\n    scale: options.resolution,\n    ...options.overrides?.canvas,\n  });\n  const converter = new Converter(canvas, options);\n  const pdf = converter.convert();\n  switch (options.method) {\n    case \"build\":\n      return pdf;\n    case \"open\": {\n      window.open(pdf.output(\"bloburl\"), \"_blank\");\n      return pdf;\n    }\n    case \"save\":\n    default: {\n      const pdfFilename = options.filename ?? `${new Date().getTime()}.pdf`;\n      await pdf.save(pdfFilename, { returnPromise: true });\n      return pdf;\n    }\n  }\n};\n\nexport default generatePDF;\n", "import jsPDF from \"jspdf\";\nimport { MM_TO_PX } from \"./constants\";\nimport { ConversionOptions, Options } from \"./types\";\n\nexport default class Converter {\n  pdf: InstanceType<typeof jsPDF>;\n  canvas: HTMLCanvasElement;\n  options: Options;\n  constructor(canvas: HTMLCanvasElement, options: ConversionOptions) {\n    this.canvas = canvas;\n    this.options = options;\n    this.pdf = new jsPDF({\n      format: this.options.page.format,\n      orientation: this.options.page.orientation,\n      ...this.options.overrides?.pdf,\n      unit: \"mm\",\n    });\n  }\n  getMarginTopMM() {\n    const margin =\n      typeof this.options.page.margin === \"object\"\n        ? this.options.page.margin.top\n        : this.options.page.margin;\n    return Number(margin);\n  }\n  getMarginLeftMM() {\n    const margin =\n      typeof this.options.page.margin === \"object\"\n        ? this.options.page.margin.left\n        : this.options.page.margin;\n    return Number(margin);\n  }\n  getMarginRightMM() {\n    const margin =\n      typeof this.options.page.margin === \"object\"\n        ? this.options.page.margin.right\n        : this.options.page.margin;\n    return Number(margin);\n  }\n  getMarginBottomMM() {\n    const margin =\n      typeof this.options.page.margin === \"object\"\n        ? this.options.page.margin.bottom\n        : this.options.page.margin;\n    return Number(margin);\n  }\n  getMarginTop() {\n    return this.getMarginTopMM() * MM_TO_PX;\n  }\n  getMarginBottom() {\n    return this.getMarginBottomMM() * MM_TO_PX;\n  }\n  getMarginLeft() {\n    return this.getMarginLeftMM() * MM_TO_PX;\n  }\n  getMarginRight() {\n    return this.getMarginRightMM() * MM_TO_PX;\n  }\n  getScale() {\n    return this.options.resolution;\n  }\n  getPageHeight() {\n    return this.getPageHeightMM() * MM_TO_PX;\n  }\n  getPageHeightMM() {\n    return this.pdf.internal.pageSize.height;\n  }\n  getPageWidthMM() {\n    return this.pdf.internal.pageSize.width;\n  }\n  getPageWidth() {\n    return this.getPageWidthMM() * MM_TO_PX;\n  }\n  getOriginalCanvasWidth() {\n    return this.canvas.width / this.getScale();\n  }\n  getOriginalCanvasHeight() {\n    return this.canvas.height / this.getScale();\n  }\n  getCanvasPageAvailableHeight() {\n    return (\n      this.getPageAvailableHeight() *\n      this.getScale() *\n      this.getHorizontalFitFactor()\n    );\n  }\n  getPageAvailableWidth() {\n    return this.getPageWidth() - (this.getMarginLeft() + this.getMarginRight());\n  }\n  getPageAvailableHeight() {\n    return (\n      this.getPageHeight() - (this.getMarginTop() + this.getMarginBottom())\n    );\n  }\n  getPageAvailableWidthMM() {\n    return this.getPageAvailableWidth() / MM_TO_PX;\n  }\n  getPageAvailableHeightMM() {\n    return this.getPageAvailableHeight() / MM_TO_PX;\n  }\n  getNumberPages() {\n    return Math.ceil(this.canvas.height / this.getCanvasPageAvailableHeight());\n  }\n  getHorizontalFitFactor() {\n    if (this.getPageAvailableWidth() < this.getOriginalCanvasWidth()) {\n      return this.getOriginalCanvasWidth() / this.getPageAvailableWidth();\n    }\n    return 1;\n  }\n  getCanvasOffsetY(pageNumber: number) {\n    return this.getCanvasPageAvailableHeight() * (pageNumber - 1);\n  }\n  getCanvasHeightLeft(pageNumber: number) {\n    return this.canvas.height - this.getCanvasOffsetY(pageNumber);\n  }\n  getCanvasPageHeight(pageNumber: number) {\n    if (this.canvas.height < this.getCanvasPageAvailableHeight()) {\n      return this.canvas.height;\n    }\n    const canvasHeightPending = this.getCanvasHeightLeft(pageNumber);\n    return canvasHeightPending < this.getCanvasPageAvailableHeight()\n      ? canvasHeightPending\n      : this.getCanvasPageAvailableHeight();\n  }\n  getCanvasPageWidth() {\n    return this.canvas.width;\n  }\n  createCanvasPage(pageNumber: number): HTMLCanvasElement {\n    const canvasPageWidth = this.getCanvasPageWidth();\n    const canvasPageHeight = this.getCanvasPageHeight(pageNumber);\n    const canvasPage = document.createElement(\"canvas\");\n    canvasPage.setAttribute(\"width\", String(canvasPageWidth));\n    canvasPage.setAttribute(\"height\", String(canvasPageHeight));\n    const ctx = canvasPage.getContext(\"2d\");\n    ctx.drawImage(\n      this.canvas,\n      0,\n      this.getCanvasOffsetY(pageNumber),\n      this.canvas.width,\n      canvasPageHeight,\n      0,\n      0,\n      this.canvas.width,\n      canvasPageHeight\n    );\n    return canvasPage;\n  }\n  convert(): InstanceType<typeof jsPDF> {\n    let pageNumber = 1;\n    const numberPages = this.getNumberPages();\n    while (pageNumber <= numberPages) {\n      if (pageNumber > 1) {\n        this.pdf.addPage(\n          this.options.page.format,\n          this.options.page.orientation\n        );\n      }\n      const canvasPage = this.createCanvasPage(pageNumber);\n      const pageImageDataURL = canvasPage.toDataURL(\n        this.options.canvas.mimeType,\n        this.options.canvas.qualityRatio\n      );\n      this.pdf.setPage(pageNumber);\n      this.pdf.addImage({\n        imageData: pageImageDataURL,\n        width:\n          canvasPage.width /\n          (this.getScale() * MM_TO_PX * this.getHorizontalFitFactor()),\n        height:\n          canvasPage.height /\n          (this.getScale() * MM_TO_PX * this.getHorizontalFitFactor()),\n        x: this.getMarginLeftMM(),\n        y: this.getMarginTopMM(),\n      });\n      pageNumber += 1;\n    }\n    return this.pdf;\n  }\n}\n", "import { ConversionOptions } from \"./types\";\n\nexport const MM_TO_PX = 3.77952755906;\n\nexport enum Resolution {\n  LOW = 1,\n  NORMAL = 2,\n  MEDIUM = 3,\n  HIGH = 7,\n  EXTREME = 12,\n}\n\nexport enum Margin {\n  NONE = 0,\n  SMALL = 5,\n  MEDIUM = 10,\n  LARGE = 25,\n}\n\nexport const DEFAULT_OPTIONS: Readonly<ConversionOptions> = {\n  method: \"save\",\n  resolution: Resolution.MEDIUM,\n  page: {\n    margin: Margin.NONE,\n    format: \"A4\",\n    orientation: \"portrait\",\n  },\n  canvas: {\n    mimeType: \"image/jpeg\",\n    qualityRatio: 1,\n    useCORS: true,\n    logging: false,\n  },\n  overrides: {},\n};\n", "import { DEFAULT_OPTIONS } from \"./constants\";\nimport { ConversionOptions, Options } from \"./types\";\n\nexport const buildConvertOptions = (options?: Options): ConversionOptions => {\n  if (!options) {\n    return DEFAULT_OPTIONS;\n  }\n  return {\n    ...DEFAULT_OPTIONS,\n    ...options,\n    canvas: { ...DEFAULT_OPTIONS.canvas, ...options.canvas },\n    page: { ...DEFAULT_OPTIONS.page, ...options.page },\n  };\n};\n"],
  "mappings": "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",
  "names": ["Resolution", "Margin"]
}
