{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/utils.ts","../src/page.ts","../src/table.ts","../src/document.ts"],"sourcesContent":["export const MM_TO_CM = 1 / 10;\nexport const CM_TO_IN = 1 / 2.54; // 1CM = 1/2.54 IN\nexport const PX_TO_IN = 1 / 96; // 1 PX = 1/96 IN\nexport const IN_TO_PT = 72; // 1 IN = 72 PT\nexport const PC_TO_PT = 12; // 1 PC = 12 PT\n","import { ExpandedSideDefinition, SideDefinition } from './types';\n\n/**\n * Convert any side definition into a static structure\n *\n * @param sides The sides to convert\n * @param defaultDefinition The value to use when no definition is provided\n * @param transformer The transformation to apply to the sides once normalized\n */\nexport function normalizeSides<T = undefined, D extends T = T, O = T>(\n  sides: SideDefinition<T>,\n  defaultDefinition: SideDefinition<D> = undefined as D,\n  transformer: (v: T | D) => O = v => v as never\n): ExpandedSideDefinition<O> {\n  if (sides === undefined) sides = defaultDefinition;\n  if (typeof sides !== 'object' || sides === null) sides = [sides, sides, sides, sides];\n  if (Array.isArray(sides)) {\n    if (sides.length === 2) sides = { vertical: sides[0], horizontal: sides[1] };\n    else sides = { top: sides[0], right: sides[1], bottom: sides[2], left: sides[3] };\n  }\n\n  if ('vertical' in sides && 'horizontal' in sides) {\n    sides = { top: sides.vertical, right: sides.horizontal, bottom: sides.vertical, left: sides.horizontal };\n  }\n\n  if (!('top' in sides && 'right' in sides && 'bottom' in sides && 'left' in sides)) {\n    sides = { top: sides, right: sides, bottom: sides, left: sides };\n  }\n\n  return {\n    top: transformer(sides.top),\n    right: transformer(sides.right),\n    bottom: transformer(sides.bottom),\n    left: transformer(sides.left),\n  };\n}\n","/* Pulled directly from PDFKit */\n\n/*\nPDFPage - represents a single page in the PDF document\nBy Devon Govett\n*/\n\nimport { ExtendedPDFDocument } from './document';\nimport { ExpandedSideDefinition, ExtendedPDFDocumentOptions, SideDefinition, Size } from './types';\nimport { normalizeSides } from './utils';\n\nconst DEFAULT_MARGINS: SideDefinition<Size> = '1in';\n\nconst SIZES = {\n  '4A0': [4767.87, 6740.79],\n  '2A0': [3370.39, 4767.87],\n  A0: [2383.94, 3370.39],\n  A1: [1683.78, 2383.94],\n  A2: [1190.55, 1683.78],\n  A3: [841.89, 1190.55],\n  A4: [595.28, 841.89],\n  A5: [419.53, 595.28],\n  A6: [297.64, 419.53],\n  A7: [209.76, 297.64],\n  A8: [147.4, 209.76],\n  A9: [104.88, 147.4],\n  A10: [73.7, 104.88],\n  B0: [2834.65, 4008.19],\n  B1: [2004.09, 2834.65],\n  B2: [1417.32, 2004.09],\n  B3: [1000.63, 1417.32],\n  B4: [708.66, 1000.63],\n  B5: [498.9, 708.66],\n  B6: [354.33, 498.9],\n  B7: [249.45, 354.33],\n  B8: [175.75, 249.45],\n  B9: [124.72, 175.75],\n  B10: [87.87, 124.72],\n  C0: [2599.37, 3676.54],\n  C1: [1836.85, 2599.37],\n  C2: [1298.27, 1836.85],\n  C3: [918.43, 1298.27],\n  C4: [649.13, 918.43],\n  C5: [459.21, 649.13],\n  C6: [323.15, 459.21],\n  C7: [229.61, 323.15],\n  C8: [161.57, 229.61],\n  C9: [113.39, 161.57],\n  C10: [79.37, 113.39],\n  RA0: [2437.8, 3458.27],\n  RA1: [1729.13, 2437.8],\n  RA2: [1218.9, 1729.13],\n  RA3: [864.57, 1218.9],\n  RA4: [609.45, 864.57],\n  SRA0: [2551.18, 3628.35],\n  SRA1: [1814.17, 2551.18],\n  SRA2: [1275.59, 1814.17],\n  SRA3: [907.09, 1275.59],\n  SRA4: [637.8, 907.09],\n  EXECUTIVE: [521.86, 756.0],\n  FOLIO: [612.0, 936.0],\n  LEGAL: [612.0, 1008.0],\n  LETTER: [612.0, 792.0],\n  TABLOID: [792.0, 1224.0],\n} as const;\n\nexport class PDFPage {\n  document: ExtendedPDFDocument;\n  size: string | [number, number];\n  layout: 'portrait' | 'landscape';\n  margins: ExpandedSideDefinition<number>;\n  width: number;\n  height: number;\n  content: PDFKit.PDFKitReference;\n  resources: PDFKit.PDFKitReference;\n  dictionary: PDFKit.PDFKitReference;\n  markings: never[];\n  constructor(document: ExtendedPDFDocument, options: ExtendedPDFDocumentOptions = {}) {\n    this.document = document;\n    this.size = options.size || 'letter';\n    this.layout = options.layout || 'portrait';\n\n    // calculate page dimensions\n    const dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase() as never];\n    this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\n    this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\n    this.content = this.document.ref({});\n\n    if (options.font !== undefined) document.font(options.font, options.fontFamily);\n    if (options.fontSize !== undefined) document.fontSize(options.fontSize);\n\n    // process margins\n    this.margins = normalizeSides(options.margins ?? options.margin, DEFAULT_MARGINS, x =>\n      document.sizeToPoint(x, 0, this)\n    );\n\n    // Initialize the Font, XObject, and ExtGState dictionaries\n    this.resources = this.document.ref({\n      ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n    });\n\n    // The page dictionary\n    this.dictionary = this.document.ref({\n      Type: 'Page',\n      // @ts-ignore Set internally\n      Parent: this.document._root.data.Pages,\n      MediaBox: [0, 0, this.width, this.height],\n      Contents: this.content,\n      Resources: this.resources,\n    });\n    this.markings = [];\n  }\n\n  // Lazily create these objects\n  get fonts() {\n    const data = this.resources.data;\n    return data.Font ?? (data.Font = {});\n  }\n  get xobjects() {\n    const data = this.resources.data;\n    return data.XObject ?? (data.XObject = {});\n  }\n  get ext_gstates() {\n    const data = this.resources.data;\n    return data.ExtGState ?? (data.ExtGState = {});\n  }\n  get patterns() {\n    const data = this.resources.data;\n    return data.Pattern ?? (data.Pattern = {});\n  }\n  get colorSpaces() {\n    const data = this.resources.data;\n    // @ts-ignore Set internally\n    return data.ColorSpace ?? (data.ColorSpace = {});\n  }\n  get annotations() {\n    const data = this.dictionary.data;\n    return data.Annots ?? (data.Annots = []);\n  }\n  get structParentTreeKey() {\n    const data = this.dictionary.data;\n    // @ts-ignore Set internally\n    return data.StructParents ?? (data.StructParents = this.document.createStructParentTreeNextKey());\n  }\n  maxY() {\n    return this.height - this.margins.bottom;\n  }\n  write(chunk: any) {\n    return this.content.write(chunk);\n  }\n  end() {\n    this.dictionary.end(undefined);\n    this.resources.end(undefined);\n    return this.content.end(undefined);\n  }\n\n  get contentWidth(): number {\n    return this.width - this.margins.left - this.margins.right;\n  }\n  get contentHeight(): number {\n    return this.height - this.margins.top - this.margins.bottom;\n  }\n}\n","import { ExtendedPDFDocument } from './document';\nimport {\n  Cell,\n  Ensure,\n  ExpandedSideDefinition,\n  PDFColor,\n  PDFTextOptions,\n  SideDefinition,\n  Size,\n  Wideness,\n} from './types';\nimport { normalizeSides } from './utils';\n\nexport type PDFTableOpts = {\n  /** Number of columns you wish to divide the table into, allowing the width of a cell to be calculated **/\n  cols?: number;\n  /** Number of rows you wish to divide the table into, allowing the height of a cell to be calculated **/\n  rows?: number;\n  /**\n   * Height of a cell\n   *\n   * If not provided it will compute it based on height / rows\n   *\n   * @note If neither rows nor cellHeight is provided, the default of 2em is used\n   */\n  cellHeight?: Size;\n  /**\n   * Width of a cell\n   *\n   * If not provided it will compute it based on width / cols\n   *\n   * @note If neither cols nor cellWidth is provided, the default of 25% of the table width is used\n   */\n  cellWidth?: Size;\n  /** Position of the table **/\n  x?: Size | undefined;\n  /** Position of the table **/\n  y?: Size | undefined;\n  /** The width of the table, undefined for page width **/\n  width?: Size | undefined;\n  /** The height of the table **/\n  height?: Size | undefined;\n  /**\n   * The thickness of the tables border\n   *\n   * Default is 0, so no table border (as the cells render it)\n   */\n  border?: SideDefinition<Wideness>;\n  /** The border color of the table **/\n  borderColor?: SideDefinition<PDFColor>;\n  /** Any config you wish to apply to all cells **/\n  defaultCell?: Cell;\n};\n\nexport class PDFTable {\n  private _cellWidth: number;\n  readonly cellHeight: number;\n  private currCellX: number;\n  private currCellY: number;\n  private cellClaim: Set<string>;\n  private readonly x: number;\n  private readonly y: number;\n  private _width: number;\n  readonly height: number;\n  private readonly border: ExpandedSideDefinition<number>;\n  private readonly borderColor: ExpandedSideDefinition<PDFColor>;\n  private cols?: number;\n\n  constructor(\n    private readonly document: ExtendedPDFDocument,\n    private readonly _opts: PDFTableOpts\n  ) {\n    // Normalise\n    this.x = document.sizeToPoint(_opts.x, document.x);\n    this.y = document.sizeToPoint(_opts.y, document.y);\n    this._width = document.sizeToPoint(_opts.width, document.page.contentWidth - this.x);\n    this.height = document.sizeToPoint(_opts.height, document.page.contentHeight - this.y);\n\n    this.cols = _opts.cols;\n    if (_opts.cols !== undefined && _opts.cols <= 0) throw new Error('cols must be greater than 0');\n    this._cellWidth = document.sizeToPoint(_opts.cellWidth, _opts.cols ? this._width / _opts.cols : this._width / 4);\n    this.cellHeight = document.sizeToPoint(_opts.cellHeight, _opts.rows ? this.height / _opts.rows : '2em');\n\n    if (_opts.width === undefined && _opts.cols !== undefined) this._width = this._cellWidth * _opts.cols;\n\n    this.border = normalizeSides(_opts.border, 0, document.sizeToPoint.bind(document));\n    this.borderColor = normalizeSides(_opts.borderColor);\n\n    this.currCellX = 0;\n    this.currCellY = 0;\n    this.cellClaim = new Set();\n  }\n\n  get opts(): Readonly<PDFTableOpts> {\n    return Object.freeze(this._opts);\n  }\n\n  get width(): number {\n    return this._width;\n  }\n\n  get cellWidth(): number {\n    return this._cellWidth;\n  }\n\n  private initCellWidth(cols: number) {\n    if (this.cols === undefined) {\n      this.cols = cols;\n      if (this._opts.cellWidth === undefined) this._cellWidth = this._width / cols;\n      if (this._opts.width === undefined) this._width = this._cellWidth * cols;\n    }\n  }\n\n  /**\n   * Draws a row of cells to the table\n   *\n   * @example\n   * ```\n   * doc.table()\n   *    .row(['A', 'B', 'C'])\n   *    .row(['D', 'E', 'F'])\n   * ```\n   * would render a 3x2 table\n   *\n   * |  A  |  B  |  C  |\n   * | --- | --- | --- |\n   * |  D  |  E  |  F  |\n   *\n   * @param cells - The cells to render\n   * @param defaultCell - Any config you wish to apply to all cells in this row\n   */\n  row(cells: Iterable<Cell | Cell['value']>, defaultCell: Cell = {}) {\n    // If you haven't provided any 'cols' indication,\n    // then we will use the first non-empty row to infer it (assuming it's an array) else it will use the default\n    if (Array.isArray(cells)) {\n      const colspan = cells.reduce((acc, _cell) => {\n        const cellColspan =\n          _cell === null || _cell === undefined || typeof _cell !== 'object' ? undefined : _cell.colspan;\n\n        return (\n          acc + Math.max(1, Math.floor(cellColspan ?? defaultCell.colspan ?? this._opts.defaultCell?.colspan ?? 1))\n        );\n      }, 0);\n      if (colspan > 0) this.initCellWidth(colspan);\n    }\n\n    const startY = this.currCellY;\n    this.currCellX = 0;\n\n    let maxY = this.y;\n\n    for (let _cell of cells) {\n      if (_cell === null || _cell === undefined || typeof _cell !== 'object') _cell = { value: _cell };\n      const cell: Ensure<Cell, 'colspan' | 'rowspan'> = {\n        rowspan: 1,\n        colspan: 1,\n        ...this._opts.defaultCell,\n        ...defaultCell,\n        ..._cell,\n      };\n\n      // spanning can only be integer\n      cell.rowspan = Math.max(1, Math.floor(cell.rowspan));\n      cell.colspan = Math.max(1, Math.floor(cell.colspan));\n\n      // Find first available cell\n      while (this.cellClaim.has(`${this.currCellX},${this.currCellY}`)) {\n        this.currCellX++;\n        if (this.cols && this.currCellX >= this.cols) {\n          this.currCellX = 0;\n          this.currCellY++;\n        }\n      }\n\n      maxY = Math.max(maxY, this.renderCell(cell));\n\n      // Claim any spanning cells\n      for (let i = 0; i < cell.colspan; i++) {\n        for (let j = 0; j < cell.rowspan; j++) {\n          if (i !== 0 || j !== 0) this.cellClaim.add(`${this.currCellX + i},${this.currCellY + j}`);\n        }\n      }\n      // Move to next cell\n      this.currCellX++;\n    }\n\n    this.currCellY++;\n\n    // Draw borders\n    this.renderBorder(\n      this.border,\n      this.borderColor,\n      this.x,\n      this.y + startY * this.cellHeight,\n      this._width,\n      maxY - (this.y + startY * this.cellHeight),\n      { top: startY === 0, right: true, bottom: false, left: true }\n    );\n\n    this.document.x = this.x;\n    this.document.y = maxY;\n    this.document.moveTo(this.document.x, this.document.y);\n\n    return this;\n  }\n\n  /**\n   * Indicates to the table that it is finished\n   *\n   * so that it can do any cleanup such as drawing the bottom border\n   *\n   * Not strictly required to call but may leave your table in an undesirable state\n   *\n   * @returns the document\n   */\n  end() {\n    // Draw bottom border\n    this.renderBorder(this.border, this.borderColor, this.x, this.document.y, this._width, 0, {\n      top: false,\n      right: false,\n      bottom: true,\n      left: false,\n    });\n\n    return this.document;\n  }\n\n  private renderCell({\n    border: _border,\n    borderColor: _borderColor,\n    padding: _padding,\n    align: _align,\n    fontSize: _fontSize,\n    textStroke: _textStroke,\n    textColor,\n    textStrokeColor,\n    backgroundColor,\n    value,\n    colspan,\n    rowspan,\n    font,\n    fontFamily,\n    debug,\n    x,\n    y,\n    ...cell\n  }: Ensure<Cell, 'colspan' | 'rowspan'>) {\n    // Set font temporarily\n    const rollbackFont = this.document.currentFont;\n    const rollbackFontSize = this.document.currentFontSize;\n    const rollbackFontFamily = this.document.currentFontFamily;\n    if (font) this.document.font(font, fontFamily);\n    const fontSize = this.document.sizeToPoint(_fontSize);\n    if (fontSize) this.document.fontSize(fontSize);\n\n    // Normalize options\n    const border = normalizeSides(_border, 1, this.document.sizeToPoint.bind(this.document));\n    const borderColor = normalizeSides(_borderColor, undefined);\n    const padding = normalizeSides(_padding, '0.25em', this.document.sizeToPoint.bind(this.document));\n    const align = _align === undefined || typeof _align === 'string' ? { x: _align, y: _align } : _align;\n    const textStroke = this.document.sizeToPoint(_textStroke);\n\n    // Default alignment\n    if (align.x === undefined) align.x = 'left';\n    if (align.y === undefined) align.y = 'center';\n\n    if (typeof value === 'boolean') value = value ? '\\u2713' : '\\u2715';\n    if (value !== null && value !== undefined) value = String(value);\n\n    // Render the cell borders\n    const rectHeight = this.cellHeight * rowspan;\n    const rectWidth = this._cellWidth * colspan;\n    const posX = this.document.sizeToPoint(x, this.x + this.currCellX * this._cellWidth);\n    const posY = this.document.sizeToPoint(y, this.y + this.currCellY * this.cellHeight);\n\n    if (backgroundColor !== undefined) {\n      this.document.save().rect(posX, posY, rectWidth, rectHeight).fill(backgroundColor).restore();\n    }\n    this.renderBorder(border, borderColor, posX, posY, rectWidth, rectHeight);\n\n    // Render text\n\n    // Compute bounds of text\n    const textRectWidth = rectWidth - padding.left - padding.right;\n    const textRectHeight = rectHeight - padding.top - padding.bottom;\n\n    const textOptions: PDFTextOptions = {\n      align: align.x,\n      ellipsis: true,\n      lineBreak: false,\n      stroke: textStroke > 0,\n      fill: true,\n      ...cell,\n      width: textRectWidth,\n      height: textRectHeight,\n    };\n\n    // Compute actual position of text based on alignment\n    const textHeight = this.document.heightOfString(value ?? '', textOptions);\n    const yOffset = (textRectHeight - textHeight) * (align.y === 'bottom' ? 1 : align.y === 'center' ? 0.5 : 0);\n\n    const textPosX = posX + padding.left;\n    const textPosY = posY + padding.top;\n\n    // Debug viewer\n    if (debug) {\n      this.document.save().dash(1, { space: 1 }).lineWidth(1).strokeOpacity(0.3);\n      // Debug text bounds\n      if (value?.length) this.document.rect(textPosX, textPosY + yOffset, textRectWidth, textHeight).stroke('red');\n      // Debug text allocated space\n      this.document.rect(textPosX, textPosY, textRectWidth, textRectHeight).stroke('blue');\n      this.document.restore();\n    }\n\n    if (value?.length) {\n      this.document.save();\n      if (textColor !== undefined) this.document.fillColor(textColor);\n      if (textStroke > 0) this.document.lineWidth(textStroke);\n      if (textStrokeColor !== undefined) this.document.strokeColor(textStrokeColor);\n      this.document.text(value, textPosX, textPosY + yOffset, textOptions);\n      this.document.restore();\n    }\n    if (font || fontSize) this.document.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n\n    // Return bottom Y position of cell\n    return posY + rectHeight;\n  }\n\n  private renderBorder(\n    border: ExpandedSideDefinition<number>,\n    borderColor: ExpandedSideDefinition<PDFColor | undefined>,\n    x: number,\n    y: number,\n    width: number,\n    height: number,\n    mask?: Partial<Record<keyof ExpandedSideDefinition, boolean>>\n  ): void {\n    const computedBorder = Object.fromEntries(\n      Object.entries(border).map(([k, v]) => [k, mask && !mask[k as never] ? 0 : v])\n    ) as ExpandedSideDefinition<number>;\n\n    if ([computedBorder.right, computedBorder.bottom, computedBorder.left].every(val => val === computedBorder.top)) {\n      if (computedBorder.top > 0) {\n        this.document.save().lineWidth(computedBorder.top).rect(x, y, width, height);\n        if (borderColor.top) this.document.strokeColor(borderColor.top);\n        this.document.stroke().restore();\n      }\n    } else {\n      // Top\n      if (computedBorder.top > 0) {\n        this.document\n          .save()\n          .lineWidth(computedBorder.top)\n          .polygon([x, y], [x + width, y]);\n        if (borderColor.top) this.document.strokeColor(borderColor.top);\n        this.document.stroke().restore();\n      }\n      // Right\n      if (computedBorder.right > 0) {\n        this.document\n          .save()\n          .lineWidth(computedBorder.right)\n          .polygon([x + width, y], [x + width, y + height]);\n        if (borderColor.right) this.document.strokeColor(borderColor.right);\n        this.document.stroke().restore();\n      }\n      // Bottom\n      if (computedBorder.bottom > 0) {\n        this.document\n          .save()\n          .lineWidth(computedBorder.bottom)\n          .polygon([x + width, y + height], [x, y + height]);\n        if (borderColor.bottom) this.document.strokeColor(borderColor.bottom);\n        this.document.stroke().restore();\n      }\n      // Left\n      if (computedBorder.left > 0) {\n        this.document\n          .save()\n          .lineWidth(computedBorder.left)\n          .polygon([x, y + height], [x, y]);\n        if (borderColor.left) this.document.strokeColor(borderColor.left);\n        this.document.stroke().restore();\n      }\n    }\n  }\n}\n","import PDFDocument from 'pdfkit';\nimport { CM_TO_IN, IN_TO_PT, MM_TO_CM, PC_TO_PT, PX_TO_IN } from './constants';\nimport { PDFPage } from './page';\nimport { PDFTable, PDFTableOpts } from './table';\nimport { ExtendedPDFDocumentOptions, PDFFontSource, Size } from './types';\n\nexport class ExtendedPDFDocument extends PDFDocument {\n  /** The documents current font **/\n  currentFont!: PDFFontSource;\n  /** The documents current font family (if provided) **/\n  currentFontFamily?: string;\n\n  // @ts-ignore Complaints about margin is irrelevant as it isn't used internally\n  public page: PDFPage;\n\n  // @ts-ignore Complaints about margin is irrelevant as it isn't used internally\n  public options: ExtendedPDFDocumentOptions;\n\n  // @ts-ignore Initialized internally\n  private _fontSize: number;\n  // @ts-ignore Initialized internally\n  private _registeredFonts: object;\n  // @ts-ignore Initialized internally\n  private _ctm: number[];\n  // @ts-ignore Initialized internally\n  private _pageBuffer: any;\n  // @ts-ignore Initialized internally\n  private _root: any;\n\n  private readonly remSize: number;\n\n  constructor(options: ExtendedPDFDocumentOptions = {}) {\n    super(options as never);\n    this.options = options;\n\n    if (options.font !== undefined) this.font(options.font, options.fontFamily);\n    if (options.fontSize !== undefined) this.fontSize(options.fontSize);\n\n    this.remSize = this.currentFontSize;\n  }\n\n  // @ts-ignore Complaints about margin is irrelevant as it isn't used internally\n  addPage(options?: ExtendedPDFDocumentOptions) {\n    if (!options) options = this.options;\n\n    // end the current page if needed\n    if (!this.options.bufferPages) this.flushPages();\n\n    // create a page object\n    this.page = new PDFPage(this, options);\n    this._pageBuffer.push(this.page);\n\n    // add the page to the object store\n    const pages = this._root.data.Pages.data;\n    pages.Kids.push(this.page.dictionary);\n    pages.Count++;\n\n    // flip PDF coordinate system so that the origin is in\n    // the top left rather than the bottom left\n    this._ctm = [1, 0, 0, 1, 0, 0];\n    // Position the document at the content origin\n    this.transform(1, 0, 0, -1, this.page.margins.left, this.page.height - this.page.margins.bottom);\n\n    // reset x and y coordinates\n    this.x = 0;\n    this.y = 0;\n    this.moveTo(0, 0);\n\n    this.emit('pageAdded');\n    return this;\n  }\n\n  /** The documents current font size (in points) **/\n  get currentFontSize() {\n    return this._fontSize;\n  }\n\n  font(src: PDFFontSource, family?: string | number, size?: number): this {\n    if (typeof family === 'number') {\n      size = family;\n      family = undefined;\n    }\n\n    if (this.currentFont === src && this.currentFontFamily === family && (!size || this.currentFontSize === size)) {\n      return this;\n    }\n\n    if (this.options.lazyRegisterFont && typeof src === 'string' && !(src in this._registeredFonts)) {\n      this.options.lazyRegisterFont(this, src, family);\n    }\n\n    this.currentFont = src;\n    this.currentFontFamily = family;\n\n    if (family) return super.font(src, family, size);\n    else return super.font(src, size);\n  }\n\n  fontSize(size: Size): this {\n    return super.fontSize(this.sizeToPoint(size));\n  }\n\n  table(opts: PDFTableOpts = {}) {\n    return new PDFTable(this, opts);\n  }\n\n  /**\n   * Convert a {@link Size} into a point measurement\n   *\n   * @param size - The string to convert\n   * @param defaultValue - The default value when undefined\n   * @param page - The page used for computing font sizes\n   */\n  sizeToPoint(\n    size: Size | boolean | undefined,\n    defaultValue: Size | boolean | undefined = 0,\n    page = this.page\n  ): number {\n    if (typeof defaultValue !== 'number') defaultValue = this.sizeToPoint(defaultValue);\n    if (size === undefined) return defaultValue;\n    if (typeof size === 'number') {\n      if (size > 0) return size;\n      return defaultValue;\n    }\n    if (typeof size === 'boolean') return Number(size);\n\n    const match = String(size).match(/((\\d+)?(\\.\\d+)?)(em|in|px|cm|mm|pc|ex|ch|rem|vw|vh|vmin|vmax|%|pt)?/);\n    if (!match) throw new Error(`Unsupported size '${size}'`);\n    let multiplier: number;\n    switch (match[4]) {\n      case 'em':\n        multiplier = this.currentFontSize;\n        break;\n      case 'in':\n        multiplier = IN_TO_PT;\n        break;\n      case 'px':\n        multiplier = PX_TO_IN * IN_TO_PT;\n        break;\n      case 'cm':\n        multiplier = CM_TO_IN * IN_TO_PT;\n        break;\n      case 'mm':\n        multiplier = MM_TO_CM * CM_TO_IN * IN_TO_PT;\n        break;\n      case 'pc':\n        multiplier = PC_TO_PT;\n        break;\n      case 'ex':\n        multiplier = this.currentLineHeight();\n        break;\n      case 'ch':\n        multiplier = this.widthOfString('0');\n        break;\n      case 'rem':\n        multiplier = this.remSize;\n        break;\n      case 'vw':\n        multiplier = page.width / 100;\n        break;\n      case 'vh':\n        multiplier = page.height / 100;\n        break;\n      case 'vmin':\n        multiplier = Math.min(page.width, page.height) / 100;\n        break;\n      case 'vmax':\n        multiplier = Math.max(page.width, page.height) / 100;\n        break;\n      case '%':\n        multiplier = this.currentFontSize / 100;\n        break;\n      case 'pt':\n      default:\n        multiplier = 1;\n    }\n\n    return multiplier * Number(match[1]);\n  }\n}\n"],"names":[],"mappings":"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"}