@pdfme/converter 6.1.2-dev.9 → 6.1.3-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -121,4 +121,4 @@ async function img2pdf(imgs, options = {}) {
121
121
  //#endregion
122
122
  export { pdf2size as n, pdf2img as r, img2pdf as t };
123
123
 
124
- //# sourceMappingURL=img2pdf-Ca1yX5Sv.js.map
124
+ //# sourceMappingURL=img2pdf-CTJv8er1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"img2pdf-Ca1yX5Sv.js","names":[],"sources":["../src/pdf2img.ts","../src/pdf2size.ts","../src/img2pdf.ts"],"sourcesContent":["import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport type { ImageType } from './types.js';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\n createCanvas: (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas;\n canvasToArrayBuffer: (\n canvas: HTMLCanvasElement | OffscreenCanvas,\n imageType: ImageType,\n ) => ArrayBuffer;\n}\n\nexport interface Pdf2ImgOptions {\n scale?: number;\n imageType?: ImageType;\n range?: {\n start?: number;\n end?: number;\n };\n}\n\nexport async function pdf2img(\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n env: Environment,\n): Promise<ArrayBuffer[]> {\n try {\n const { scale = 1, imageType = 'jpeg', range = {} } = options;\n const { start = 0, end = Infinity } = range;\n\n const { getDocument, destroyDocument, createCanvas, canvasToArrayBuffer } = env;\n\n const pdfDoc = await getDocument(pdf);\n try {\n const numPages = pdfDoc.numPages;\n\n const startPage = Math.max(start + 1, 1);\n const endPage = Math.min(end + 1, numPages);\n\n const results: ArrayBuffer[] = [];\n\n for (let pageNum = startPage; pageNum <= endPage; pageNum++) {\n const page = await pdfDoc.getPage(pageNum);\n const viewport = page.getViewport({ scale });\n\n const canvas = createCanvas(viewport.width, viewport.height);\n if (!canvas) {\n throw new Error('Failed to create canvas');\n }\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (!context) {\n throw new Error('Failed to get canvas context');\n }\n\n await page.render({\n canvas: canvas as unknown as HTMLCanvasElement,\n canvasContext: context,\n viewport,\n }).promise;\n const arrayBuffer = canvasToArrayBuffer(canvas, imageType);\n results.push(arrayBuffer);\n }\n\n return results;\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n } catch (error) {\n throw new Error(`[@pdfme/converter] pdf2img failed: ${(error as Error).message}`);\n }\n}\n","import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport { Size, pt2mm } from '@pdfme/common';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\n}\n\nexport interface Pdf2SizeOptions {\n scale?: number;\n}\n\nexport async function pdf2size(\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2SizeOptions = {},\n env: Environment,\n): Promise<Size[]> {\n const { scale = 1 } = options;\n const { getDocument, destroyDocument } = env;\n const pdfDoc = await getDocument(pdf);\n\n try {\n return await Promise.all(\n Array.from({ length: pdfDoc.numPages }, async (_, i) => {\n return await pdfDoc.getPage(i + 1).then((page) => {\n const { height, width } = page.getViewport({ scale, rotation: 0 });\n\n return { height: pt2mm(height), width: pt2mm(width) };\n });\n }),\n );\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n}\n","import { PDFDocument } from '@pdfme/pdf-lib';\nimport { mm2pt } from '@pdfme/common';\nimport type { ImageType } from './types.js';\n\ninterface Img2PdfOptions {\n scale?: number;\n imageType?: ImageType;\n size?: { height: number; width: number }; // in millimeters\n margin?: [number, number, number, number]; // in millimeters [top, right, bottom, left]\n}\n\nfunction detectImageType(buffer: ArrayBuffer): 'jpeg' | 'png' | 'unknown' {\n const bytes = new Uint8Array(buffer);\n\n if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xd8) {\n return 'jpeg';\n }\n\n if (\n bytes.length >= 8 &&\n bytes[0] === 0x89 &&\n bytes[1] === 0x50 &&\n bytes[2] === 0x4e &&\n bytes[3] === 0x47 &&\n bytes[4] === 0x0d &&\n bytes[5] === 0x0a &&\n bytes[6] === 0x1a &&\n bytes[7] === 0x0a\n ) {\n return 'png';\n }\n\n return 'unknown';\n}\n\nexport async function img2pdf(\n imgs: ArrayBuffer[],\n options: Img2PdfOptions = {},\n): Promise<ArrayBuffer> {\n try {\n const { scale = 1, size, margin = [0, 0, 0, 0] } = options;\n\n if (!Array.isArray(imgs) || imgs.length === 0) {\n throw new Error('Input must be a non-empty array of image buffers');\n }\n\n const doc = await PDFDocument.create();\n for (const img of imgs) {\n try {\n let image;\n const type = detectImageType(img);\n\n if (type === 'jpeg') {\n image = await doc.embedJpg(img);\n } else if (type === 'png') {\n image = await doc.embedPng(img);\n } else {\n try {\n image = await doc.embedJpg(img);\n } catch {\n image = await doc.embedPng(img);\n }\n }\n\n const page = doc.addPage();\n const { width: imgWidth, height: imgHeight } = image.scale(scale);\n\n // Set page size based on size option or image dimensions\n const pageWidth = size ? mm2pt(size.width) : imgWidth;\n const pageHeight = size ? mm2pt(size.height) : imgHeight;\n page.setSize(pageWidth, pageHeight);\n\n // Convert margins from mm to points\n const [topMargin, rightMargin, bottomMargin, leftMargin] = margin.map(mm2pt);\n\n // Calculate available space for the image after applying margins\n const availableWidth = pageWidth - leftMargin - rightMargin;\n const availableHeight = pageHeight - topMargin - bottomMargin;\n\n // Calculate scaling to fit image within available space while maintaining aspect ratio\n const widthRatio = availableWidth / imgWidth;\n const heightRatio = availableHeight / imgHeight;\n const ratio = Math.min(widthRatio, heightRatio, 1); // Don't upscale images\n\n // Calculate final image dimensions and position\n const finalWidth = imgWidth * ratio;\n const finalHeight = imgHeight * ratio;\n const x = leftMargin + (availableWidth - finalWidth) / 2; // Center horizontally\n const y = bottomMargin + (availableHeight - finalHeight) / 2; // Center vertically\n\n page.drawImage(image, {\n x,\n y,\n width: finalWidth,\n height: finalHeight,\n });\n } catch (error) {\n throw new Error(`Failed to process image: ${(error as Error).message}`);\n }\n }\n const pdfUint8Array = await doc.save();\n // Create a new ArrayBuffer from the Uint8Array to ensure we return only ArrayBuffer\n const buffer = new ArrayBuffer(pdfUint8Array.byteLength);\n const view = new Uint8Array(buffer);\n view.set(pdfUint8Array);\n return buffer;\n } catch (error) {\n throw new Error(`[@pdfme/converter] img2pdf failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"img2pdf-CTJv8er1.js","names":[],"sources":["../src/pdf2img.ts","../src/pdf2size.ts","../src/img2pdf.ts"],"sourcesContent":["import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport type { ImageType } from './types.js';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\n createCanvas: (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas;\n canvasToArrayBuffer: (\n canvas: HTMLCanvasElement | OffscreenCanvas,\n imageType: ImageType,\n ) => ArrayBuffer;\n}\n\nexport interface Pdf2ImgOptions {\n scale?: number;\n imageType?: ImageType;\n range?: {\n start?: number;\n end?: number;\n };\n}\n\nexport async function pdf2img(\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n env: Environment,\n): Promise<ArrayBuffer[]> {\n try {\n const { scale = 1, imageType = 'jpeg', range = {} } = options;\n const { start = 0, end = Infinity } = range;\n\n const { getDocument, destroyDocument, createCanvas, canvasToArrayBuffer } = env;\n\n const pdfDoc = await getDocument(pdf);\n try {\n const numPages = pdfDoc.numPages;\n\n const startPage = Math.max(start + 1, 1);\n const endPage = Math.min(end + 1, numPages);\n\n const results: ArrayBuffer[] = [];\n\n for (let pageNum = startPage; pageNum <= endPage; pageNum++) {\n const page = await pdfDoc.getPage(pageNum);\n const viewport = page.getViewport({ scale });\n\n const canvas = createCanvas(viewport.width, viewport.height);\n if (!canvas) {\n throw new Error('Failed to create canvas');\n }\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (!context) {\n throw new Error('Failed to get canvas context');\n }\n\n await page.render({\n canvas: canvas as unknown as HTMLCanvasElement,\n canvasContext: context,\n viewport,\n }).promise;\n const arrayBuffer = canvasToArrayBuffer(canvas, imageType);\n results.push(arrayBuffer);\n }\n\n return results;\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n } catch (error) {\n throw new Error(`[@pdfme/converter] pdf2img failed: ${(error as Error).message}`);\n }\n}\n","import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport { Size, pt2mm } from '@pdfme/common';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\n}\n\nexport interface Pdf2SizeOptions {\n scale?: number;\n}\n\nexport async function pdf2size(\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2SizeOptions = {},\n env: Environment,\n): Promise<Size[]> {\n const { scale = 1 } = options;\n const { getDocument, destroyDocument } = env;\n const pdfDoc = await getDocument(pdf);\n\n try {\n return await Promise.all(\n Array.from({ length: pdfDoc.numPages }, async (_, i) => {\n return await pdfDoc.getPage(i + 1).then((page) => {\n const { height, width } = page.getViewport({ scale, rotation: 0 });\n\n return { height: pt2mm(height), width: pt2mm(width) };\n });\n }),\n );\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n}\n","import { PDFDocument } from '@pdfme/pdf-lib';\nimport { mm2pt } from '@pdfme/common';\nimport type { ImageType } from './types.js';\n\ninterface Img2PdfOptions {\n scale?: number;\n imageType?: ImageType;\n size?: { height: number; width: number }; // in millimeters\n margin?: [number, number, number, number]; // in millimeters [top, right, bottom, left]\n}\n\nfunction detectImageType(buffer: ArrayBuffer): 'jpeg' | 'png' | 'unknown' {\n const bytes = new Uint8Array(buffer);\n\n if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xd8) {\n return 'jpeg';\n }\n\n if (\n bytes.length >= 8 &&\n bytes[0] === 0x89 &&\n bytes[1] === 0x50 &&\n bytes[2] === 0x4e &&\n bytes[3] === 0x47 &&\n bytes[4] === 0x0d &&\n bytes[5] === 0x0a &&\n bytes[6] === 0x1a &&\n bytes[7] === 0x0a\n ) {\n return 'png';\n }\n\n return 'unknown';\n}\n\nexport async function img2pdf(\n imgs: ArrayBuffer[],\n options: Img2PdfOptions = {},\n): Promise<ArrayBuffer> {\n try {\n const { scale = 1, size, margin = [0, 0, 0, 0] } = options;\n\n if (!Array.isArray(imgs) || imgs.length === 0) {\n throw new Error('Input must be a non-empty array of image buffers');\n }\n\n const doc = await PDFDocument.create();\n for (const img of imgs) {\n try {\n let image;\n const type = detectImageType(img);\n\n if (type === 'jpeg') {\n image = await doc.embedJpg(img);\n } else if (type === 'png') {\n image = await doc.embedPng(img);\n } else {\n try {\n image = await doc.embedJpg(img);\n } catch {\n image = await doc.embedPng(img);\n }\n }\n\n const page = doc.addPage();\n const { width: imgWidth, height: imgHeight } = image.scale(scale);\n\n // Set page size based on size option or image dimensions\n const pageWidth = size ? mm2pt(size.width) : imgWidth;\n const pageHeight = size ? mm2pt(size.height) : imgHeight;\n page.setSize(pageWidth, pageHeight);\n\n // Convert margins from mm to points\n const [topMargin, rightMargin, bottomMargin, leftMargin] = margin.map(mm2pt);\n\n // Calculate available space for the image after applying margins\n const availableWidth = pageWidth - leftMargin - rightMargin;\n const availableHeight = pageHeight - topMargin - bottomMargin;\n\n // Calculate scaling to fit image within available space while maintaining aspect ratio\n const widthRatio = availableWidth / imgWidth;\n const heightRatio = availableHeight / imgHeight;\n const ratio = Math.min(widthRatio, heightRatio, 1); // Don't upscale images\n\n // Calculate final image dimensions and position\n const finalWidth = imgWidth * ratio;\n const finalHeight = imgHeight * ratio;\n const x = leftMargin + (availableWidth - finalWidth) / 2; // Center horizontally\n const y = bottomMargin + (availableHeight - finalHeight) / 2; // Center vertically\n\n page.drawImage(image, {\n x,\n y,\n width: finalWidth,\n height: finalHeight,\n });\n } catch (error) {\n throw new Error(`Failed to process image: ${(error as Error).message}`);\n }\n }\n const pdfUint8Array = await doc.save();\n // Create a new ArrayBuffer from the Uint8Array to ensure we return only ArrayBuffer\n const buffer = new ArrayBuffer(pdfUint8Array.byteLength);\n const view = new Uint8Array(buffer);\n view.set(pdfUint8Array);\n return buffer;\n } catch (error) {\n throw new Error(`[@pdfme/converter] img2pdf failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-Ca1yX5Sv.js";
1
+ import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-CTJv8er1.js";
2
2
  import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf.mjs";
3
3
  //#region src/pdfjs-worker.js?worker&url
4
- var pdfjs_worker_default = "" + new URL("assets/pdfjs-worker-DNts7nT2.js", import.meta.url).href;
4
+ var pdfjs_worker_default = "" + new URL("assets/pdfjs-worker-CxCIrMGa.js", import.meta.url).href;
5
5
  //#endregion
6
6
  //#region src/index.browser.ts
7
7
  var clonePdfData = (pdf) => pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);
8
8
  var loadingTaskMap = /* @__PURE__ */ new WeakMap();
9
9
  var getDocument = async (pdf) => {
10
- if (typeof Worker !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc !== "" + new URL("assets/pdfjs-worker-DNts7nT2.js", import.meta.url).href) pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjs_worker_default;
10
+ if (typeof Worker !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc !== "" + new URL("assets/pdfjs-worker-CxCIrMGa.js", import.meta.url).href) pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjs_worker_default;
11
11
  const loadingTask = pdfjsLib.getDocument({ data: clonePdfData(pdf) });
12
12
  const document = await loadingTask.promise;
13
13
  loadingTaskMap.set(document, { destroy: () => loadingTask.destroy() });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.browser.ts"],"sourcesContent":["import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport workerSrc from './pdfjs-worker.js?worker&url';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);\n\nconst loadingTaskMap = new WeakMap<object, { destroy: () => Promise<void> }>();\n\nconst getDocument = async (pdf: ArrayBuffer | Uint8Array) => {\n if (typeof Worker !== 'undefined' && pdfjsLib.GlobalWorkerOptions.workerSrc !== workerSrc) {\n pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;\n }\n\n const loadingTask = pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n });\n const document = await loadingTask.promise;\n loadingTaskMap.set(document, { destroy: () => loadingTask.destroy() });\n return document;\n};\n\nconst destroyDocument = async (document: object) => {\n const loadingTask = loadingTaskMap.get(document);\n loadingTaskMap.delete(document);\n await loadingTask?.destroy();\n};\n\nfunction dataURLToArrayBuffer(dataURL: string): ArrayBuffer {\n // Split out the actual base64 string from the data URL scheme\n const base64String = dataURL.split(',')[1];\n\n // Decode the Base64 string to get the binary data\n const byteString = atob(base64String);\n\n // Create a typed array from the binary string\n const arrayBuffer = new ArrayBuffer(byteString.length);\n const uintArray = new Uint8Array(arrayBuffer);\n\n for (let i = 0; i < byteString.length; i++) {\n uintArray[i] = byteString.charCodeAt(i);\n }\n\n return arrayBuffer;\n}\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> =>\n _pdf2img(pdf, options, {\n getDocument,\n destroyDocument,\n createCanvas: (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n },\n canvasToArrayBuffer: (canvas, imageType) => {\n // Using type assertion to handle the canvas method\n const dataUrl = (canvas as HTMLCanvasElement).toDataURL(`image/${imageType}`);\n return dataURLToArrayBuffer(dataUrl);\n },\n });\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) =>\n _pdf2size(pdf, options, {\n getDocument,\n destroyDocument,\n });\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;;AAKA,IAAM,gBAAgB,QACpB,eAAe,aAAa,IAAI,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI;AAEvE,IAAM,iCAAiB,IAAI,SAAmD;AAE9E,IAAM,cAAc,OAAO,QAAkC;AAC3D,KAAI,OAAO,WAAW,eAAe,SAAS,oBAAoB,cAAA,KAAA,IAAA,IAAA,mCAAA,OAAA,KAAA,IAAA,CAAA,KAChE,UAAS,oBAAoB,YAAY;CAG3C,MAAM,cAAc,SAAS,YAAY,EACvC,MAAM,aAAa,IAAI,EACxB,CAAC;CACF,MAAM,WAAW,MAAM,YAAY;AACnC,gBAAe,IAAI,UAAU,EAAE,eAAe,YAAY,SAAS,EAAE,CAAC;AACtE,QAAO;;AAGT,IAAM,kBAAkB,OAAO,aAAqB;CAClD,MAAM,cAAc,eAAe,IAAI,SAAS;AAChD,gBAAe,OAAO,SAAS;AAC/B,OAAM,aAAa,SAAS;;AAG9B,SAAS,qBAAqB,SAA8B;CAE1D,MAAM,eAAe,QAAQ,MAAM,IAAI,CAAC;CAGxC,MAAM,aAAa,KAAK,aAAa;CAGrC,MAAM,cAAc,IAAI,YAAY,WAAW,OAAO;CACtD,MAAM,YAAY,IAAI,WAAW,YAAY;AAE7C,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,IACrC,WAAU,KAAK,WAAW,WAAW,EAAE;AAGzC,QAAO;;AAGT,IAAa,UAAU,OACrB,KACA,UAA0B,EAAE,KAE5B,UAAS,KAAK,SAAS;CACrB;CACA;CACA,eAAe,OAAO,WAAW;EAC/B,MAAM,SAAS,SAAS,cAAc,SAAS;AAC/C,SAAO,QAAQ;AACf,SAAO,SAAS;AAChB,SAAO;;CAET,sBAAsB,QAAQ,cAAc;AAG1C,SAAO,qBADU,OAA6B,UAAU,SAAS,YACrC,CAAQ;;CAEvC,CAAC;AAEJ,IAAa,WAAW,OAAO,KAA+B,UAA2B,EAAE,KACzF,WAAU,KAAK,SAAS;CACtB;CACA;CACD,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.browser.ts"],"sourcesContent":["import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport workerSrc from './pdfjs-worker.js?worker&url';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);\n\nconst loadingTaskMap = new WeakMap<object, { destroy: () => Promise<void> }>();\n\nconst getDocument = async (pdf: ArrayBuffer | Uint8Array) => {\n if (typeof Worker !== 'undefined' && pdfjsLib.GlobalWorkerOptions.workerSrc !== workerSrc) {\n pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;\n }\n\n const loadingTask = pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n });\n const document = await loadingTask.promise;\n loadingTaskMap.set(document, { destroy: () => loadingTask.destroy() });\n return document;\n};\n\nconst destroyDocument = async (document: object) => {\n const loadingTask = loadingTaskMap.get(document);\n loadingTaskMap.delete(document);\n await loadingTask?.destroy();\n};\n\nfunction dataURLToArrayBuffer(dataURL: string): ArrayBuffer {\n // Split out the actual base64 string from the data URL scheme\n const base64String = dataURL.split(',')[1];\n\n // Decode the Base64 string to get the binary data\n const byteString = atob(base64String);\n\n // Create a typed array from the binary string\n const arrayBuffer = new ArrayBuffer(byteString.length);\n const uintArray = new Uint8Array(arrayBuffer);\n\n for (let i = 0; i < byteString.length; i++) {\n uintArray[i] = byteString.charCodeAt(i);\n }\n\n return arrayBuffer;\n}\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> =>\n _pdf2img(pdf, options, {\n getDocument,\n destroyDocument,\n createCanvas: (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n },\n canvasToArrayBuffer: (canvas, imageType) => {\n // Using type assertion to handle the canvas method\n const dataUrl = (canvas as HTMLCanvasElement).toDataURL(`image/${imageType}`);\n return dataURLToArrayBuffer(dataUrl);\n },\n });\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) =>\n _pdf2size(pdf, options, {\n getDocument,\n destroyDocument,\n });\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;;AAKA,IAAM,gBAAgB,QACpB,eAAe,aAAa,IAAI,WAAW,GAAG,IAAI,IAAI,WAAW,GAAG;AAEtE,IAAM,iCAAiB,IAAI,QAAkD;AAE7E,IAAM,cAAc,OAAO,QAAkC;CAC3D,IAAI,OAAO,WAAW,eAAe,SAAS,oBAAoB,cAAA,KAAA,IAAA,IAAA,mCAAA,OAAA,KAAA,GAAA,EAAA,MAChE,SAAS,oBAAoB,YAAY;CAG3C,MAAM,cAAc,SAAS,YAAY,EACvC,MAAM,aAAa,GAAG,EACxB,CAAC;CACD,MAAM,WAAW,MAAM,YAAY;CACnC,eAAe,IAAI,UAAU,EAAE,eAAe,YAAY,QAAQ,EAAE,CAAC;CACrE,OAAO;AACT;AAEA,IAAM,kBAAkB,OAAO,aAAqB;CAClD,MAAM,cAAc,eAAe,IAAI,QAAQ;CAC/C,eAAe,OAAO,QAAQ;CAC9B,MAAM,aAAa,QAAQ;AAC7B;AAEA,SAAS,qBAAqB,SAA8B;CAE1D,MAAM,eAAe,QAAQ,MAAM,GAAG,EAAE;CAGxC,MAAM,aAAa,KAAK,YAAY;CAGpC,MAAM,cAAc,IAAI,YAAY,WAAW,MAAM;CACrD,MAAM,YAAY,IAAI,WAAW,WAAW;CAE5C,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,UAAU,KAAK,WAAW,WAAW,CAAC;CAGxC,OAAO;AACT;AAEA,IAAa,UAAU,OACrB,KACA,UAA0B,CAAC,MAE3B,UAAS,KAAK,SAAS;CACrB;CACA;CACA,eAAe,OAAO,WAAW;EAC/B,MAAM,SAAS,SAAS,cAAc,QAAQ;EAC9C,OAAO,QAAQ;EACf,OAAO,SAAS;EAChB,OAAO;CACT;CACA,sBAAsB,QAAQ,cAAc;EAG1C,OAAO,qBADU,OAA6B,UAAU,SAAS,WACrC,CAAO;CACrC;AACF,CAAC;AAEH,IAAa,WAAW,OAAO,KAA+B,UAA2B,CAAC,MACxF,WAAU,KAAK,SAAS;CACtB;CACA;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-Ca1yX5Sv.js";
1
+ import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-CTJv8er1.js";
2
2
  import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf.mjs";
3
3
  import { createCanvas } from "@napi-rs/canvas";
4
4
  import { createRequire } from "node:module";
@@ -1 +1 @@
1
- {"version":3,"file":"index.node.js","names":[],"sources":["../src/pdfjs.node.ts","../src/index.node.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, join } from 'node:path';\n\nconst require = createRequire(import.meta.url);\nconst pdfJsDistRoot = dirname(require.resolve('pdfjs-dist/package.json'));\n\nexport const getPdfJsWasmUrl = (): string => join(pdfJsDistRoot, 'wasm/');\n","import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { Canvas, createCanvas } from '@napi-rs/canvas';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport { getPdfJsWasmUrl } from './pdfjs.node.js';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);\nconst pdfJsWasmUrl = getPdfJsWasmUrl();\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> => {\n return _pdf2img(pdf, options, {\n getDocument: (pdf) =>\n pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n wasmUrl: pdfJsWasmUrl,\n }).promise,\n createCanvas: (width, height) => createCanvas(width, height) as unknown as HTMLCanvasElement,\n canvasToArrayBuffer: (canvas, imageType) => {\n const nodeCanvas = canvas as unknown as Canvas;\n const buffer =\n imageType === 'png' ? nodeCanvas.toBuffer('image/png') : nodeCanvas.toBuffer('image/jpeg');\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n new Uint8Array(arrayBuffer).set(buffer);\n return arrayBuffer;\n },\n });\n};\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) => {\n return _pdf2size(pdf, options, {\n getDocument: (pdf) =>\n pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n wasmUrl: pdfJsWasmUrl,\n }).promise,\n });\n};\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;;AAIA,IAAM,gBAAgB,QADN,cAAc,OAAO,KAAK,IACZ,CAAQ,QAAQ,0BAA0B,CAAC;AAEzE,IAAa,wBAAgC,KAAK,eAAe,QAAQ;;;ACAzE,IAAM,gBAAgB,QACpB,eAAe,aAAa,IAAI,WAAW,IAAI,GAAG,IAAI,WAAW,IAAI;AACvE,IAAM,eAAe,iBAAiB;AAEtC,IAAa,UAAU,OACrB,KACA,UAA0B,EAAE,KACD;AAC3B,QAAO,UAAS,KAAK,SAAS;EAC5B,cAAc,QACZ,SAAS,YAAY;GACnB,MAAM,aAAa,IAAI;GACvB,SAAS;GACV,CAAC,CAAC;EACL,eAAe,OAAO,WAAW,aAAa,OAAO,OAAO;EAC5D,sBAAsB,QAAQ,cAAc;GAC1C,MAAM,aAAa;GACnB,MAAM,SACJ,cAAc,QAAQ,WAAW,SAAS,YAAY,GAAG,WAAW,SAAS,aAAa;GAC5F,MAAM,cAAc,IAAI,YAAY,OAAO,WAAW;AACtD,OAAI,WAAW,YAAY,CAAC,IAAI,OAAO;AACvC,UAAO;;EAEV,CAAC;;AAGJ,IAAa,WAAW,OAAO,KAA+B,UAA2B,EAAE,KAAK;AAC9F,QAAO,WAAU,KAAK,SAAS,EAC7B,cAAc,QACZ,SAAS,YAAY;EACnB,MAAM,aAAa,IAAI;EACvB,SAAS;EACV,CAAC,CAAC,SACN,CAAC"}
1
+ {"version":3,"file":"index.node.js","names":[],"sources":["../src/pdfjs.node.ts","../src/index.node.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, join } from 'node:path';\n\nconst require = createRequire(import.meta.url);\nconst pdfJsDistRoot = dirname(require.resolve('pdfjs-dist/package.json'));\n\nexport const getPdfJsWasmUrl = (): string => join(pdfJsDistRoot, 'wasm/');\n","import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { Canvas, createCanvas } from '@napi-rs/canvas';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport { getPdfJsWasmUrl } from './pdfjs.node.js';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);\nconst pdfJsWasmUrl = getPdfJsWasmUrl();\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> => {\n return _pdf2img(pdf, options, {\n getDocument: (pdf) =>\n pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n wasmUrl: pdfJsWasmUrl,\n }).promise,\n createCanvas: (width, height) => createCanvas(width, height) as unknown as HTMLCanvasElement,\n canvasToArrayBuffer: (canvas, imageType) => {\n const nodeCanvas = canvas as unknown as Canvas;\n const buffer =\n imageType === 'png' ? nodeCanvas.toBuffer('image/png') : nodeCanvas.toBuffer('image/jpeg');\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n new Uint8Array(arrayBuffer).set(buffer);\n return arrayBuffer;\n },\n });\n};\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) => {\n return _pdf2size(pdf, options, {\n getDocument: (pdf) =>\n pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n wasmUrl: pdfJsWasmUrl,\n }).promise,\n });\n};\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;;AAIA,IAAM,gBAAgB,QADN,cAAc,OAAO,KAAK,GACZ,EAAQ,QAAQ,yBAAyB,CAAC;AAExE,IAAa,wBAAgC,KAAK,eAAe,OAAO;;;ACAxE,IAAM,gBAAgB,QACpB,eAAe,aAAa,IAAI,WAAW,GAAG,IAAI,IAAI,WAAW,GAAG;AACtE,IAAM,eAAe,gBAAgB;AAErC,IAAa,UAAU,OACrB,KACA,UAA0B,CAAC,MACA;CAC3B,OAAO,UAAS,KAAK,SAAS;EAC5B,cAAc,QACZ,SAAS,YAAY;GACnB,MAAM,aAAa,GAAG;GACtB,SAAS;EACX,CAAC,EAAE;EACL,eAAe,OAAO,WAAW,aAAa,OAAO,MAAM;EAC3D,sBAAsB,QAAQ,cAAc;GAC1C,MAAM,aAAa;GACnB,MAAM,SACJ,cAAc,QAAQ,WAAW,SAAS,WAAW,IAAI,WAAW,SAAS,YAAY;GAC3F,MAAM,cAAc,IAAI,YAAY,OAAO,UAAU;GACrD,IAAI,WAAW,WAAW,EAAE,IAAI,MAAM;GACtC,OAAO;EACT;CACF,CAAC;AACH;AAEA,IAAa,WAAW,OAAO,KAA+B,UAA2B,CAAC,MAAM;CAC9F,OAAO,WAAU,KAAK,SAAS,EAC7B,cAAc,QACZ,SAAS,YAAY;EACnB,MAAM,aAAa,GAAG;EACtB,SAAS;CACX,CAAC,EAAE,QACP,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"md2pdf.js","names":[],"sources":["../src/md2pdf.ts"],"sourcesContent":["import {\n normalizeLinkHref,\n pt2mm,\n resolvePageSize,\n type BlankPdf,\n type PageOrientation,\n type PageSize,\n type Schema,\n type Template,\n} from '@pdfme/common';\nimport type {\n BlockContent,\n Blockquote,\n Code,\n Heading,\n Image,\n InlineCode,\n Link,\n List,\n ListItem,\n Paragraph,\n PhrasingContent,\n Root,\n RootContent,\n Table,\n TableCell,\n TableRow,\n} from 'mdast';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\n\ntype BoxSides = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n x?: number;\n y?: number;\n};\ntype ResolvedBoxSides = { top: number; right: number; bottom: number; left: number };\ntype HeadingDepth = 1 | 2 | 3 | 4 | 5 | 6;\ntype MarkdownMargin = number | [number, number, number, number] | BoxSides;\n\nexport type Md2PdfOptions = {\n page?: {\n size?: PageSize;\n orientation?: PageOrientation;\n margin?: MarkdownMargin;\n };\n basePdf?: BlankPdf;\n style?: {\n fontName?: string;\n fontSize?: number;\n lineHeight?: number;\n fontColor?: string;\n headingScale?: Partial<Record<HeadingDepth, number>>;\n };\n};\n\nexport type Md2PdfResult = {\n template: Template;\n inputs: Record<string, string>[];\n};\n\ntype Builder = {\n basePdf: BlankPdf;\n contentFrame: { x: number; y: number; width: number; height: number };\n cursorY: number;\n fontName?: string;\n fontSize: number;\n lineHeight: number;\n fontColor: string;\n headingScale: Record<HeadingDepth, number>;\n nameCounters: Record<string, number>;\n schemas: Schema[];\n usedNames: Set<string>;\n};\n\ntype TableCellStyle = {\n fontName?: string;\n alignment: 'left' | 'center' | 'right';\n verticalAlignment: 'top' | 'middle' | 'bottom';\n fontSize: number;\n lineHeight: number;\n characterSpacing: number;\n fontColor: string;\n backgroundColor: string;\n borderColor: string;\n borderWidth: ResolvedBoxSides;\n padding: ResolvedBoxSides;\n alternateBackgroundColor?: string;\n};\n\nconst DEFAULT_PAGE_MARGIN: [number, number, number, number] = [20, 15, 20, 15];\nconst DEFAULT_FONT_SIZE = 10;\nconst DEFAULT_LINE_HEIGHT = 1.25;\nconst DEFAULT_FONT_COLOR = '#111827';\nconst DEFAULT_HEADING_SCALE: Record<HeadingDepth, number> = {\n 1: 2,\n 2: 1.65,\n 3: 1.35,\n 4: 1.15,\n 5: 1,\n 6: 1,\n};\nconst BLOCK_GAP = 4;\nconst LIST_ITEM_SPACING = 1.4;\nconst TABLE_HEADER_HEIGHT = 8.5;\nconst TABLE_ROW_HEIGHT = 7.5;\nconst IMAGE_HEIGHT = 45;\nconst CODE_BLOCK_BACKGROUND_COLOR = '#f6f8fa';\nconst CODE_BLOCK_BORDER_COLOR = '#d0d7de';\nconst CODE_BLOCK_BORDER_WIDTH = 0.1;\nconst CODE_BLOCK_PADDING: ResolvedBoxSides = { top: 2, right: 3, bottom: 2, left: 3 };\nconst BLOCKQUOTE_BACKGROUND_COLOR = '#f8fafc';\nconst BLOCKQUOTE_BORDER_COLOR = '#d0d7de';\nconst BLOCKQUOTE_BORDER_WIDTH: ResolvedBoxSides = { top: 0, right: 0, bottom: 0, left: 0.8 };\nconst BLOCKQUOTE_PADDING: ResolvedBoxSides = { top: 2, right: 3, bottom: 2, left: 3 };\nconst HORIZONTAL_RULE_COLOR = '#d0d7de';\nconst HORIZONTAL_RULE_HEIGHT = 0.25;\nconst TABLE_BORDER_COLOR = '#d0d7de';\nconst TABLE_CELL_BORDER_WIDTH = 0.1;\nconst TABLE_HEAD_BACKGROUND_COLOR = '#f6f8fa';\nconst TABLE_BODY_ALTERNATE_BACKGROUND_COLOR = '#f9fafb';\nconst TABLE_CELL_PADDING = 3;\n\nconst MARKDOWN_ESCAPE_PATTERN = /[\\\\*~`[\\]()]/g;\nconst DATA_IMAGE_PATTERN = /^data:image\\/(?:png|jpe?g);base64,/i;\nconst RENDERABLE_BLOCK_TYPES = new Set([\n 'blockquote',\n 'code',\n 'heading',\n 'html',\n 'list',\n 'paragraph',\n 'table',\n 'thematicBreak',\n]);\n\nconst markdownProcessor = unified().use(remarkParse).use(remarkGfm);\n\nexport const md2pdf = async (\n markdown: string,\n options: Md2PdfOptions = {},\n): Promise<Md2PdfResult> => {\n const root = markdownProcessor.parse(markdown) as Root;\n const builder = createBuilder(options);\n\n root.children.forEach((node) => renderBlock(node, builder));\n\n return {\n template: {\n basePdf: builder.basePdf,\n schemas: [builder.schemas],\n },\n inputs: [{}],\n };\n};\n\nconst createBuilder = (options: Md2PdfOptions): Builder => {\n const basePdf = options.basePdf ?? createBlankPdf(options);\n const [top, right, bottom, left] = basePdf.padding;\n const headingScale = { ...DEFAULT_HEADING_SCALE, ...options.style?.headingScale };\n\n return {\n basePdf,\n contentFrame: {\n x: left,\n y: top,\n width: Math.max(0, basePdf.width - left - right),\n height: Math.max(0, basePdf.height - top - bottom),\n },\n cursorY: top,\n fontName: options.style?.fontName,\n fontSize: options.style?.fontSize ?? DEFAULT_FONT_SIZE,\n lineHeight: options.style?.lineHeight ?? DEFAULT_LINE_HEIGHT,\n fontColor: options.style?.fontColor ?? DEFAULT_FONT_COLOR,\n headingScale,\n nameCounters: {},\n schemas: [],\n usedNames: new Set(),\n };\n};\n\nconst createBlankPdf = (options: Md2PdfOptions): BlankPdf => {\n const pageSize = resolvePageSize(\n options.page?.size ?? 'A4',\n options.page?.orientation ?? 'portrait',\n );\n return {\n width: pageSize.width,\n height: pageSize.height,\n padding: resolveMargin(options.page?.margin ?? DEFAULT_PAGE_MARGIN),\n };\n};\n\nconst resolveMargin = (margin: MarkdownMargin): [number, number, number, number] => {\n if (typeof margin === 'number') return [margin, margin, margin, margin];\n if (Array.isArray(margin)) return margin;\n\n const x = margin.x ?? 0;\n const y = margin.y ?? 0;\n return [margin.top ?? y, margin.right ?? x, margin.bottom ?? y, margin.left ?? x];\n};\n\nconst renderBlock = (node: RootContent | BlockContent, builder: Builder): void => {\n switch (node.type) {\n case 'heading':\n renderHeading(node, builder);\n return;\n case 'paragraph':\n renderParagraph(node, builder);\n return;\n case 'list':\n renderList(node, builder);\n return;\n case 'code':\n renderCode(node, builder);\n return;\n case 'blockquote':\n renderBlockquote(node, builder);\n return;\n case 'table':\n renderTable(node, builder);\n return;\n case 'thematicBreak':\n renderLine(builder);\n return;\n case 'html':\n case 'definition':\n case 'footnoteDefinition':\n case 'yaml':\n return;\n default:\n renderNestedBlocks(node, builder);\n }\n};\n\nconst renderNestedBlocks = (node: RootContent | BlockContent, builder: Builder): void => {\n if ('children' in node && Array.isArray(node.children)) {\n node.children.forEach((child) => {\n if (isBlockContent(child)) renderBlock(child, builder);\n });\n }\n};\n\nconst renderHeading = (node: Heading, builder: Builder): void => {\n const depth = Math.min(Math.max(node.depth, 1), 6) as HeadingDepth;\n const content = renderInlineChildren(node.children);\n const fontSize = builder.fontSize * builder.headingScale[depth];\n addTextSchema(builder, {\n name: resolveName(builder, slugify(toPlainText(node)) || `heading_${depth}`),\n content,\n fontSize,\n height: estimateTextHeight(content, fontSize, builder.lineHeight),\n gap: depth <= 1 ? 5 : depth === 2 ? 4.5 : BLOCK_GAP,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderParagraph = (node: Paragraph, builder: Builder): void => {\n if (node.children.length === 1 && node.children[0]?.type === 'image') {\n renderImage(node.children[0], builder);\n return;\n }\n\n const content = renderInlineChildren(node.children);\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderList = (node: List, builder: Builder): void => {\n const items = collectListItems(node);\n if (items.length === 0) return;\n\n const fontSize = builder.fontSize;\n const height =\n items.length * estimateTextHeight('', fontSize, builder.lineHeight) +\n Math.max(0, items.length - 1) * LIST_ITEM_SPACING;\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'list'),\n type: 'list',\n content: JSON.stringify(items),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '',\n listStyle: node.ordered ? 'ordered' : 'bullet',\n markerWidth: 6,\n markerGap: 2,\n indentSize: 6,\n itemSpacing: LIST_ITEM_SPACING,\n textFormat: 'inline-markdown',\n overflow: 'expand',\n };\n\n addSchema(builder, schema);\n};\n\nconst renderCode = (node: Code, builder: Builder): void => {\n const content = node.value;\n addTextSchema(builder, {\n content,\n backgroundColor: CODE_BLOCK_BACKGROUND_COLOR,\n borderColor: CODE_BLOCK_BORDER_COLOR,\n borderWidth: resolveBoxSides(CODE_BLOCK_BORDER_WIDTH),\n padding: CODE_BLOCK_PADDING,\n textFormat: 'plain',\n });\n};\n\nconst renderBlockquote = (node: Blockquote, builder: Builder): void => {\n const content = node.children\n .map((child) => blockToMarkdown(child))\n .join('\\n')\n .trim();\n\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n backgroundColor: BLOCKQUOTE_BACKGROUND_COLOR,\n borderColor: BLOCKQUOTE_BORDER_COLOR,\n borderWidth: BLOCKQUOTE_BORDER_WIDTH,\n padding: BLOCKQUOTE_PADDING,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderTable = (node: Table, builder: Builder): void => {\n const rows = node.children.map(tableRowToStrings).filter((row) => row.length > 0);\n if (rows.length === 0) return;\n\n const columnCount = Math.max(...rows.map((row) => row.length));\n const head = normalizeRowLength(rows[0], columnCount);\n const body = rows.slice(1).map((row) => normalizeRowLength(row, columnCount));\n const height = TABLE_HEADER_HEIGHT + Math.max(1, body.length) * TABLE_ROW_HEIGHT;\n const columnWidths = Array.from({ length: columnCount }, () => 100 / columnCount);\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'table'),\n type: 'table',\n content: JSON.stringify(body),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n showHead: true,\n repeatHead: false,\n head,\n headWidthPercentages: columnWidths,\n tableStyles: {\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: 0.2,\n },\n headStyles: {\n ...defaultCellStyle(builder),\n backgroundColor: TABLE_HEAD_BACKGROUND_COLOR,\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n },\n bodyStyles: {\n ...defaultCellStyle(builder),\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n alternateBackgroundColor: TABLE_BODY_ALTERNATE_BACKGROUND_COLOR,\n },\n columnStyles: {},\n };\n\n addSchema(builder, schema);\n};\n\nconst renderImage = (node: Image, builder: Builder): void => {\n if (!DATA_IMAGE_PATTERN.test(node.url)) {\n const link = normalizeLinkHref(node.url);\n const label = node.alt || node.title || node.url;\n addTextSchema(builder, {\n content: link\n ? `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(link)})`\n : escapeInlineMarkdown(label),\n textFormat: 'inline-markdown',\n });\n return;\n }\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'image'),\n type: 'image',\n content: node.url,\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: IMAGE_HEIGHT,\n readOnly: true,\n };\n\n addSchema(builder, schema);\n};\n\nconst renderLine = (builder: Builder): void => {\n const schema: Schema = {\n name: resolveAutoName(builder, 'line'),\n type: 'line',\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: HORIZONTAL_RULE_HEIGHT,\n readOnly: true,\n color: HORIZONTAL_RULE_COLOR,\n };\n\n addSchema(builder, schema);\n};\n\nconst addTextSchema = (\n builder: Builder,\n options: {\n name?: string;\n content: string;\n fontSize?: number;\n height?: number;\n gap?: number;\n backgroundColor?: string;\n borderColor?: string;\n borderWidth?: ResolvedBoxSides;\n padding?: ResolvedBoxSides;\n textFormat?: 'plain' | 'inline-markdown';\n x?: number;\n width?: number;\n },\n): void => {\n const fontSize = options.fontSize ?? builder.fontSize;\n const content = options.content;\n const boxVerticalInset = getBoxVerticalInset(options);\n const schema: Schema = {\n name: options.name ?? resolveAutoName(builder, 'text'),\n type: 'text',\n content,\n position: { x: options.x ?? builder.contentFrame.x, y: builder.cursorY },\n width: options.width ?? builder.contentFrame.width,\n height:\n (options.height ?? estimateTextHeight(content, fontSize, builder.lineHeight)) +\n boxVerticalInset,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: options.backgroundColor ?? '',\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n padding: options.padding,\n textFormat: options.textFormat ?? 'plain',\n overflow: 'expand',\n };\n\n addSchema(builder, schema, options.gap);\n};\n\nconst addSchema = (builder: Builder, schema: Schema, gap = BLOCK_GAP): void => {\n builder.schemas.push(schema);\n builder.cursorY += schema.height + gap;\n};\n\nconst collectListItems = (node: List, level = 0): string[] =>\n node.children.flatMap((item) => {\n const prefix = typeof item.checked === 'boolean' ? `[${item.checked ? 'x' : ' '}] ` : '';\n const text = item.children\n .filter((child) => child.type !== 'list')\n .map((child) => blockToMarkdown(child))\n .join(' ')\n .trim();\n const current = `${'\\t'.repeat(level)}${prefix}${text}`;\n const nested = item.children\n .filter(isList)\n .flatMap((child) => collectListItems(child, level + 1));\n return [current, ...nested];\n });\n\nconst blockToMarkdown = (node: RootContent | BlockContent): string => {\n switch (node.type) {\n case 'paragraph':\n case 'heading':\n return renderInlineChildren(node.children);\n case 'code':\n return node.value;\n case 'list':\n return collectListItems(node).join('\\n');\n case 'blockquote':\n return node.children.map(blockToMarkdown).join('\\n');\n case 'table':\n return node.children.map((row) => tableRowToStrings(row).join(' | ')).join('\\n');\n case 'thematicBreak':\n return '---';\n default:\n return '';\n }\n};\n\nconst renderInlineChildren = (children: PhrasingContent[]): string =>\n children.map(renderInline).join('');\n\nconst renderInline = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n return escapeInlineMarkdown(node.value);\n case 'emphasis':\n return `*${renderInlineChildren(node.children)}*`;\n case 'strong':\n return `**${renderInlineChildren(node.children)}**`;\n case 'delete':\n return `~~${renderInlineChildren(node.children)}~~`;\n case 'inlineCode':\n return renderInlineCode(node);\n case 'break':\n return '\\n';\n case 'link':\n return renderLink(node);\n case 'image':\n return renderInlineImage(node);\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? renderInlineChildren(node.children as PhrasingContent[])\n : '';\n }\n};\n\nconst renderInlineCode = (node: InlineCode): string => `\\`${node.value.replaceAll('`', '\\\\`')}\\``;\n\nconst renderLink = (node: Link): string => {\n const label = renderInlineChildren(node.children);\n const href = normalizeLinkHref(node.url);\n if (!href) return label;\n return `[${label}](${escapeLinkDestination(href)})`;\n};\n\nconst renderInlineImage = (node: Image): string => {\n const label = node.alt || node.title || node.url;\n const href = normalizeLinkHref(node.url);\n if (!href) return escapeInlineMarkdown(label);\n return `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(href)})`;\n};\n\nconst tableRowToStrings = (row: TableRow): string[] => row.children.map(tableCellToString);\n\nconst tableCellToString = (cell: TableCell): string =>\n cell.children.map(inlineToPlainText).join('');\n\nconst normalizeRowLength = (row: string[], columnCount: number): string[] =>\n Array.from({ length: columnCount }, (_, index) => row[index] ?? '');\n\nconst defaultCellStyle = (builder: Builder): TableCellStyle => ({\n fontName: builder.fontName,\n alignment: 'left',\n verticalAlignment: 'middle',\n fontSize: builder.fontSize,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '#ffffff',\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n padding: resolveBoxSides(TABLE_CELL_PADDING),\n});\n\nconst resolveBoxSides = (value: number | BoxSides): ResolvedBoxSides => {\n if (typeof value === 'number') return { top: value, right: value, bottom: value, left: value };\n const x = value.x ?? 0;\n const y = value.y ?? 0;\n return {\n top: value.top ?? y,\n right: value.right ?? x,\n bottom: value.bottom ?? y,\n left: value.left ?? x,\n };\n};\n\nconst getBoxVerticalInset = (value: {\n borderWidth?: ResolvedBoxSides;\n padding?: ResolvedBoxSides;\n}) =>\n (value.borderWidth?.top ?? 0) +\n (value.borderWidth?.bottom ?? 0) +\n (value.padding?.top ?? 0) +\n (value.padding?.bottom ?? 0);\n\nconst resolveAutoName = (builder: Builder, prefix: string): string => {\n let name = '';\n do {\n builder.nameCounters[prefix] = (builder.nameCounters[prefix] ?? 0) + 1;\n name = `${prefix}_${builder.nameCounters[prefix]}`;\n } while (builder.usedNames.has(name));\n builder.usedNames.add(name);\n return name;\n};\n\nconst resolveName = (builder: Builder, baseName: string): string => {\n let name = baseName;\n let index = 0;\n while (builder.usedNames.has(name)) {\n index += 1;\n name = `${baseName}_${index}`;\n }\n builder.usedNames.add(name);\n return name;\n};\n\nconst estimateTextHeight = (content: string, fontSize: number, lineHeight: number): number => {\n const lineCount = Math.max(1, content.split('\\n').length);\n return Math.max(4, lineCount * pt2mm(fontSize * lineHeight) + 1);\n};\n\nconst escapeInlineMarkdown = (value: string): string =>\n value.replace(MARKDOWN_ESCAPE_PATTERN, (match) => `\\\\${match}`);\n\nconst escapeLinkDestination = (href: string): string =>\n encodeURI(href).replace(/[\\\\()]/g, (match) => `\\\\${match}`);\n\nconst slugify = (value: string): string =>\n value\n .trim()\n .toLowerCase()\n .replace(/[^\\p{Letter}\\p{Number}]+/gu, '-')\n .replace(/^-|-$/g, '');\n\nconst toPlainText = (node: Heading): string =>\n node.children\n .map((child) => {\n if ('value' in child && typeof child.value === 'string') return child.value;\n if ('alt' in child && typeof child.alt === 'string') return child.alt;\n if ('children' in child && Array.isArray(child.children)) {\n return (child.children as PhrasingContent[])\n .map((grandchild) => toPlainInlineText(grandchild))\n .join('');\n }\n return '';\n })\n .join('');\n\nconst toPlainInlineText = (node: PhrasingContent): string => {\n if ('value' in node && typeof node.value === 'string') return node.value;\n if ('alt' in node && typeof node.alt === 'string') return node.alt;\n if ('children' in node && Array.isArray(node.children)) {\n return (node.children as PhrasingContent[]).map(toPlainInlineText).join('');\n }\n return '';\n};\n\nconst inlineToPlainText = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n case 'inlineCode':\n return node.value;\n case 'break':\n return '\\n';\n case 'image':\n return node.alt || node.title || node.url;\n case 'link':\n case 'emphasis':\n case 'strong':\n case 'delete':\n return node.children.map(inlineToPlainText).join('');\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? (node.children as PhrasingContent[]).map(inlineToPlainText).join('')\n : '';\n }\n};\n\nconst isBlockContent = (node: unknown): node is BlockContent =>\n typeof node === 'object' &&\n node !== null &&\n 'type' in node &&\n typeof node.type === 'string' &&\n RENDERABLE_BLOCK_TYPES.has(node.type);\n\nconst isList = (node: ListItem['children'][number]): node is List => node.type === 'list';\n"],"mappings":";;;;;AA8FA,IAAM,sBAAwD;CAAC;CAAI;CAAI;CAAI;CAAG;AAC9E,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,wBAAsD;CAC1D,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AACD,IAAM,YAAY;AAClB,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,8BAA8B;AACpC,IAAM,0BAA0B;AAChC,IAAM,0BAA0B;AAChC,IAAM,qBAAuC;CAAE,KAAK;CAAG,OAAO;CAAG,QAAQ;CAAG,MAAM;CAAG;AACrF,IAAM,8BAA8B;AACpC,IAAM,0BAA0B;AAChC,IAAM,0BAA4C;CAAE,KAAK;CAAG,OAAO;CAAG,QAAQ;CAAG,MAAM;CAAK;AAC5F,IAAM,qBAAuC;CAAE,KAAK;CAAG,OAAO;CAAG,QAAQ;CAAG,MAAM;CAAG;AACrF,IAAM,wBAAwB;AAC9B,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,8BAA8B;AACpC,IAAM,wCAAwC;AAC9C,IAAM,qBAAqB;AAE3B,IAAM,0BAA0B;AAChC,IAAM,qBAAqB;AAC3B,IAAM,yBAAyB,IAAI,IAAI;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,IAAM,oBAAoB,SAAS,CAAC,IAAI,YAAY,CAAC,IAAI,UAAU;AAEnE,IAAa,SAAS,OACpB,UACA,UAAyB,EAAE,KACD;CAC1B,MAAM,OAAO,kBAAkB,MAAM,SAAS;CAC9C,MAAM,UAAU,cAAc,QAAQ;AAEtC,MAAK,SAAS,SAAS,SAAS,YAAY,MAAM,QAAQ,CAAC;AAE3D,QAAO;EACL,UAAU;GACR,SAAS,QAAQ;GACjB,SAAS,CAAC,QAAQ,QAAQ;GAC3B;EACD,QAAQ,CAAC,EAAE,CAAC;EACb;;AAGH,IAAM,iBAAiB,YAAoC;CACzD,MAAM,UAAU,QAAQ,WAAW,eAAe,QAAQ;CAC1D,MAAM,CAAC,KAAK,OAAO,QAAQ,QAAQ,QAAQ;CAC3C,MAAM,eAAe;EAAE,GAAG;EAAuB,GAAG,QAAQ,OAAO;EAAc;AAEjF,QAAO;EACL;EACA,cAAc;GACZ,GAAG;GACH,GAAG;GACH,OAAO,KAAK,IAAI,GAAG,QAAQ,QAAQ,OAAO,MAAM;GAChD,QAAQ,KAAK,IAAI,GAAG,QAAQ,SAAS,MAAM,OAAO;GACnD;EACD,SAAS;EACT,UAAU,QAAQ,OAAO;EACzB,UAAU,QAAQ,OAAO,YAAY;EACrC,YAAY,QAAQ,OAAO,cAAc;EACzC,WAAW,QAAQ,OAAO,aAAa;EACvC;EACA,cAAc,EAAE;EAChB,SAAS,EAAE;EACX,2BAAW,IAAI,KAAK;EACrB;;AAGH,IAAM,kBAAkB,YAAqC;CAC3D,MAAM,WAAW,gBACf,QAAQ,MAAM,QAAQ,MACtB,QAAQ,MAAM,eAAe,WAC9B;AACD,QAAO;EACL,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,SAAS,cAAc,QAAQ,MAAM,UAAU,oBAAoB;EACpE;;AAGH,IAAM,iBAAiB,WAA6D;AAClF,KAAI,OAAO,WAAW,SAAU,QAAO;EAAC;EAAQ;EAAQ;EAAQ;EAAO;AACvE,KAAI,MAAM,QAAQ,OAAO,CAAE,QAAO;CAElC,MAAM,IAAI,OAAO,KAAK;CACtB,MAAM,IAAI,OAAO,KAAK;AACtB,QAAO;EAAC,OAAO,OAAO;EAAG,OAAO,SAAS;EAAG,OAAO,UAAU;EAAG,OAAO,QAAQ;EAAE;;AAGnF,IAAM,eAAe,MAAkC,YAA2B;AAChF,SAAQ,KAAK,MAAb;EACE,KAAK;AACH,iBAAc,MAAM,QAAQ;AAC5B;EACF,KAAK;AACH,mBAAgB,MAAM,QAAQ;AAC9B;EACF,KAAK;AACH,cAAW,MAAM,QAAQ;AACzB;EACF,KAAK;AACH,cAAW,MAAM,QAAQ;AACzB;EACF,KAAK;AACH,oBAAiB,MAAM,QAAQ;AAC/B;EACF,KAAK;AACH,eAAY,MAAM,QAAQ;AAC1B;EACF,KAAK;AACH,cAAW,QAAQ;AACnB;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,OACH;EACF,QACE,oBAAmB,MAAM,QAAQ;;;AAIvC,IAAM,sBAAsB,MAAkC,YAA2B;AACvF,KAAI,cAAc,QAAQ,MAAM,QAAQ,KAAK,SAAS,CACpD,MAAK,SAAS,SAAS,UAAU;AAC/B,MAAI,eAAe,MAAM,CAAE,aAAY,OAAO,QAAQ;GACtD;;AAIN,IAAM,iBAAiB,MAAe,YAA2B;CAC/D,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,OAAO,EAAE,EAAE,EAAE;CAClD,MAAM,UAAU,qBAAqB,KAAK,SAAS;CACnD,MAAM,WAAW,QAAQ,WAAW,QAAQ,aAAa;AACzD,eAAc,SAAS;EACrB,MAAM,YAAY,SAAS,QAAQ,YAAY,KAAK,CAAC,IAAI,WAAW,QAAQ;EAC5E;EACA;EACA,QAAQ,mBAAmB,SAAS,UAAU,QAAQ,WAAW;EACjE,KAAK,SAAS,IAAI,IAAI,UAAU,IAAI,MAAM;EAC1C,YAAY;EACb,CAAC;;AAGJ,IAAM,mBAAmB,MAAiB,YAA2B;AACnE,KAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,IAAI,SAAS,SAAS;AACpE,cAAY,KAAK,SAAS,IAAI,QAAQ;AACtC;;CAGF,MAAM,UAAU,qBAAqB,KAAK,SAAS;AACnD,KAAI,CAAC,QAAQ,MAAM,CAAE;AACrB,eAAc,SAAS;EACrB;EACA,YAAY;EACb,CAAC;;AAGJ,IAAM,cAAc,MAAY,YAA2B;CACzD,MAAM,QAAQ,iBAAiB,KAAK;AACpC,KAAI,MAAM,WAAW,EAAG;CAExB,MAAM,WAAW,QAAQ;CACzB,MAAM,SACJ,MAAM,SAAS,mBAAmB,IAAI,UAAU,QAAQ,WAAW,GACnE,KAAK,IAAI,GAAG,MAAM,SAAS,EAAE,GAAG;AA2BlC,WAAU,SAAS;EAxBjB,MAAM,gBAAgB,SAAS,OAAO;EACtC,MAAM;EACN,SAAS,KAAK,UAAU,MAAM;EAC9B,UAAU;GAAE,GAAG,QAAQ,aAAa;GAAG,GAAG,QAAQ;GAAS;EAC3D,OAAO,QAAQ,aAAa;EAC5B;EACA,UAAU;EACV,WAAW;EACX,mBAAmB;EACnB;EACA,UAAU,QAAQ;EAClB,YAAY,QAAQ;EACpB,kBAAkB;EAClB,WAAW,QAAQ;EACnB,iBAAiB;EACjB,WAAW,KAAK,UAAU,YAAY;EACtC,aAAa;EACb,WAAW;EACX,YAAY;EACZ,aAAa;EACb,YAAY;EACZ,UAAU;EAGO,CAAO;;AAG5B,IAAM,cAAc,MAAY,YAA2B;CACzD,MAAM,UAAU,KAAK;AACrB,eAAc,SAAS;EACrB;EACA,iBAAiB;EACjB,aAAa;EACb,aAAa,gBAAgB,wBAAwB;EACrD,SAAS;EACT,YAAY;EACb,CAAC;;AAGJ,IAAM,oBAAoB,MAAkB,YAA2B;CACrE,MAAM,UAAU,KAAK,SAClB,KAAK,UAAU,gBAAgB,MAAM,CAAC,CACtC,KAAK,KAAK,CACV,MAAM;AAET,KAAI,CAAC,QAAQ,MAAM,CAAE;AACrB,eAAc,SAAS;EACrB;EACA,iBAAiB;EACjB,aAAa;EACb,aAAa;EACb,SAAS;EACT,YAAY;EACb,CAAC;;AAGJ,IAAM,eAAe,MAAa,YAA2B;CAC3D,MAAM,OAAO,KAAK,SAAS,IAAI,kBAAkB,CAAC,QAAQ,QAAQ,IAAI,SAAS,EAAE;AACjF,KAAI,KAAK,WAAW,EAAG;CAEvB,MAAM,cAAc,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC;CAC9D,MAAM,OAAO,mBAAmB,KAAK,IAAI,YAAY;CACrD,MAAM,OAAO,KAAK,MAAM,EAAE,CAAC,KAAK,QAAQ,mBAAmB,KAAK,YAAY,CAAC;CAC7E,MAAM,SAAS,sBAAsB,KAAK,IAAI,GAAG,KAAK,OAAO,GAAG;CAChE,MAAM,eAAe,MAAM,KAAK,EAAE,QAAQ,aAAa,QAAQ,MAAM,YAAY;AAiCjF,WAAU,SAAS;EA9BjB,MAAM,gBAAgB,SAAS,QAAQ;EACvC,MAAM;EACN,SAAS,KAAK,UAAU,KAAK;EAC7B,UAAU;GAAE,GAAG,QAAQ,aAAa;GAAG,GAAG,QAAQ;GAAS;EAC3D,OAAO,QAAQ,aAAa;EAC5B;EACA,UAAU;EACV,UAAU;EACV,YAAY;EACZ;EACA,sBAAsB;EACtB,aAAa;GACX,aAAa;GACb,aAAa;GACd;EACD,YAAY;GACV,GAAG,iBAAiB,QAAQ;GAC5B,iBAAiB;GACjB,aAAa;GACb,aAAa,gBAAgB,wBAAwB;GACtD;EACD,YAAY;GACV,GAAG,iBAAiB,QAAQ;GAC5B,aAAa;GACb,aAAa,gBAAgB,wBAAwB;GACrD,0BAA0B;GAC3B;EACD,cAAc,EAAE;EAGC,CAAO;;AAG5B,IAAM,eAAe,MAAa,YAA2B;AAC3D,KAAI,CAAC,mBAAmB,KAAK,KAAK,IAAI,EAAE;EACtC,MAAM,OAAO,kBAAkB,KAAK,IAAI;EACxC,MAAM,QAAQ,KAAK,OAAO,KAAK,SAAS,KAAK;AAC7C,gBAAc,SAAS;GACrB,SAAS,OACL,IAAI,qBAAqB,MAAM,CAAC,IAAI,sBAAsB,KAAK,CAAC,KAChE,qBAAqB,MAAM;GAC/B,YAAY;GACb,CAAC;AACF;;AAaF,WAAU,SAAS;EATjB,MAAM,gBAAgB,SAAS,QAAQ;EACvC,MAAM;EACN,SAAS,KAAK;EACd,UAAU;GAAE,GAAG,QAAQ,aAAa;GAAG,GAAG,QAAQ;GAAS;EAC3D,OAAO,QAAQ,aAAa;EAC5B,QAAQ;EACR,UAAU;EAGO,CAAO;;AAG5B,IAAM,cAAc,YAA2B;AAW7C,WAAU,SAAS;EATjB,MAAM,gBAAgB,SAAS,OAAO;EACtC,MAAM;EACN,UAAU;GAAE,GAAG,QAAQ,aAAa;GAAG,GAAG,QAAQ;GAAS;EAC3D,OAAO,QAAQ,aAAa;EAC5B,QAAQ;EACR,UAAU;EACV,OAAO;EAGU,CAAO;;AAG5B,IAAM,iBACJ,SACA,YAcS;CACT,MAAM,WAAW,QAAQ,YAAY,QAAQ;CAC7C,MAAM,UAAU,QAAQ;CACxB,MAAM,mBAAmB,oBAAoB,QAAQ;AA0BrD,WAAU,SAAS;EAxBjB,MAAM,QAAQ,QAAQ,gBAAgB,SAAS,OAAO;EACtD,MAAM;EACN;EACA,UAAU;GAAE,GAAG,QAAQ,KAAK,QAAQ,aAAa;GAAG,GAAG,QAAQ;GAAS;EACxE,OAAO,QAAQ,SAAS,QAAQ,aAAa;EAC7C,SACG,QAAQ,UAAU,mBAAmB,SAAS,UAAU,QAAQ,WAAW,IAC5E;EACF,UAAU;EACV,WAAW;EACX,mBAAmB;EACnB;EACA,UAAU,QAAQ;EAClB,YAAY,QAAQ;EACpB,kBAAkB;EAClB,WAAW,QAAQ;EACnB,iBAAiB,QAAQ,mBAAmB;EAC5C,aAAa,QAAQ;EACrB,aAAa,QAAQ;EACrB,SAAS,QAAQ;EACjB,YAAY,QAAQ,cAAc;EAClC,UAAU;EAGO,EAAQ,QAAQ,IAAI;;AAGzC,IAAM,aAAa,SAAkB,QAAgB,MAAM,cAAoB;AAC7E,SAAQ,QAAQ,KAAK,OAAO;AAC5B,SAAQ,WAAW,OAAO,SAAS;;AAGrC,IAAM,oBAAoB,MAAY,QAAQ,MAC5C,KAAK,SAAS,SAAS,SAAS;CAC9B,MAAM,SAAS,OAAO,KAAK,YAAY,YAAY,IAAI,KAAK,UAAU,MAAM,IAAI,MAAM;CACtF,MAAM,OAAO,KAAK,SACf,QAAQ,UAAU,MAAM,SAAS,OAAO,CACxC,KAAK,UAAU,gBAAgB,MAAM,CAAC,CACtC,KAAK,IAAI,CACT,MAAM;AAKT,QAAO,CAAC,GAJW,IAAK,OAAO,MAAM,GAAG,SAAS,QAIhC,GAHF,KAAK,SACjB,OAAO,OAAO,CACd,SAAS,UAAU,iBAAiB,OAAO,QAAQ,EAAE,CACpC,CAAO;EAC3B;AAEJ,IAAM,mBAAmB,SAA6C;AACpE,SAAQ,KAAK,MAAb;EACE,KAAK;EACL,KAAK,UACH,QAAO,qBAAqB,KAAK,SAAS;EAC5C,KAAK,OACH,QAAO,KAAK;EACd,KAAK,OACH,QAAO,iBAAiB,KAAK,CAAC,KAAK,KAAK;EAC1C,KAAK,aACH,QAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,KAAK;EACtD,KAAK,QACH,QAAO,KAAK,SAAS,KAAK,QAAQ,kBAAkB,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,KAAK;EAClF,KAAK,gBACH,QAAO;EACT,QACE,QAAO;;;AAIb,IAAM,wBAAwB,aAC5B,SAAS,IAAI,aAAa,CAAC,KAAK,GAAG;AAErC,IAAM,gBAAgB,SAAkC;AACtD,SAAQ,KAAK,MAAb;EACE,KAAK,OACH,QAAO,qBAAqB,KAAK,MAAM;EACzC,KAAK,WACH,QAAO,IAAI,qBAAqB,KAAK,SAAS,CAAC;EACjD,KAAK,SACH,QAAO,KAAK,qBAAqB,KAAK,SAAS,CAAC;EAClD,KAAK,SACH,QAAO,KAAK,qBAAqB,KAAK,SAAS,CAAC;EAClD,KAAK,aACH,QAAO,iBAAiB,KAAK;EAC/B,KAAK,QACH,QAAO;EACT,KAAK,OACH,QAAO,WAAW,KAAK;EACzB,KAAK,QACH,QAAO,kBAAkB,KAAK;EAChC,KAAK,OACH,QAAO;EACT,QACE,QAAO,cAAc,QAAQ,MAAM,QAAQ,KAAK,SAAS,GACrD,qBAAqB,KAAK,SAA8B,GACxD;;;AAIV,IAAM,oBAAoB,SAA6B,KAAK,KAAK,MAAM,WAAW,KAAK,MAAM,CAAC;AAE9F,IAAM,cAAc,SAAuB;CACzC,MAAM,QAAQ,qBAAqB,KAAK,SAAS;CACjD,MAAM,OAAO,kBAAkB,KAAK,IAAI;AACxC,KAAI,CAAC,KAAM,QAAO;AAClB,QAAO,IAAI,MAAM,IAAI,sBAAsB,KAAK,CAAC;;AAGnD,IAAM,qBAAqB,SAAwB;CACjD,MAAM,QAAQ,KAAK,OAAO,KAAK,SAAS,KAAK;CAC7C,MAAM,OAAO,kBAAkB,KAAK,IAAI;AACxC,KAAI,CAAC,KAAM,QAAO,qBAAqB,MAAM;AAC7C,QAAO,IAAI,qBAAqB,MAAM,CAAC,IAAI,sBAAsB,KAAK,CAAC;;AAGzE,IAAM,qBAAqB,QAA4B,IAAI,SAAS,IAAI,kBAAkB;AAE1F,IAAM,qBAAqB,SACzB,KAAK,SAAS,IAAI,kBAAkB,CAAC,KAAK,GAAG;AAE/C,IAAM,sBAAsB,KAAe,gBACzC,MAAM,KAAK,EAAE,QAAQ,aAAa,GAAG,GAAG,UAAU,IAAI,UAAU,GAAG;AAErE,IAAM,oBAAoB,aAAsC;CAC9D,UAAU,QAAQ;CAClB,WAAW;CACX,mBAAmB;CACnB,UAAU,QAAQ;CAClB,YAAY,QAAQ;CACpB,kBAAkB;CAClB,WAAW,QAAQ;CACnB,iBAAiB;CACjB,aAAa;CACb,aAAa,gBAAgB,wBAAwB;CACrD,SAAS,gBAAgB,mBAAmB;CAC7C;AAED,IAAM,mBAAmB,UAA+C;AACtE,KAAI,OAAO,UAAU,SAAU,QAAO;EAAE,KAAK;EAAO,OAAO;EAAO,QAAQ;EAAO,MAAM;EAAO;CAC9F,MAAM,IAAI,MAAM,KAAK;CACrB,MAAM,IAAI,MAAM,KAAK;AACrB,QAAO;EACL,KAAK,MAAM,OAAO;EAClB,OAAO,MAAM,SAAS;EACtB,QAAQ,MAAM,UAAU;EACxB,MAAM,MAAM,QAAQ;EACrB;;AAGH,IAAM,uBAAuB,WAI1B,MAAM,aAAa,OAAO,MAC1B,MAAM,aAAa,UAAU,MAC7B,MAAM,SAAS,OAAO,MACtB,MAAM,SAAS,UAAU;AAE5B,IAAM,mBAAmB,SAAkB,WAA2B;CACpE,IAAI,OAAO;AACX,IAAG;AACD,UAAQ,aAAa,WAAW,QAAQ,aAAa,WAAW,KAAK;AACrE,SAAO,GAAG,OAAO,GAAG,QAAQ,aAAa;UAClC,QAAQ,UAAU,IAAI,KAAK;AACpC,SAAQ,UAAU,IAAI,KAAK;AAC3B,QAAO;;AAGT,IAAM,eAAe,SAAkB,aAA6B;CAClE,IAAI,OAAO;CACX,IAAI,QAAQ;AACZ,QAAO,QAAQ,UAAU,IAAI,KAAK,EAAE;AAClC,WAAS;AACT,SAAO,GAAG,SAAS,GAAG;;AAExB,SAAQ,UAAU,IAAI,KAAK;AAC3B,QAAO;;AAGT,IAAM,sBAAsB,SAAiB,UAAkB,eAA+B;CAC5F,MAAM,YAAY,KAAK,IAAI,GAAG,QAAQ,MAAM,KAAK,CAAC,OAAO;AACzD,QAAO,KAAK,IAAI,GAAG,YAAY,MAAM,WAAW,WAAW,GAAG,EAAE;;AAGlE,IAAM,wBAAwB,UAC5B,MAAM,QAAQ,0BAA0B,UAAU,KAAK,QAAQ;AAEjE,IAAM,yBAAyB,SAC7B,UAAU,KAAK,CAAC,QAAQ,YAAY,UAAU,KAAK,QAAQ;AAE7D,IAAM,WAAW,UACf,MACG,MAAM,CACN,aAAa,CACb,QAAQ,8BAA8B,IAAI,CAC1C,QAAQ,UAAU,GAAG;AAE1B,IAAM,eAAe,SACnB,KAAK,SACF,KAAK,UAAU;AACd,KAAI,WAAW,SAAS,OAAO,MAAM,UAAU,SAAU,QAAO,MAAM;AACtE,KAAI,SAAS,SAAS,OAAO,MAAM,QAAQ,SAAU,QAAO,MAAM;AAClE,KAAI,cAAc,SAAS,MAAM,QAAQ,MAAM,SAAS,CACtD,QAAQ,MAAM,SACX,KAAK,eAAe,kBAAkB,WAAW,CAAC,CAClD,KAAK,GAAG;AAEb,QAAO;EACP,CACD,KAAK,GAAG;AAEb,IAAM,qBAAqB,SAAkC;AAC3D,KAAI,WAAW,QAAQ,OAAO,KAAK,UAAU,SAAU,QAAO,KAAK;AACnE,KAAI,SAAS,QAAQ,OAAO,KAAK,QAAQ,SAAU,QAAO,KAAK;AAC/D,KAAI,cAAc,QAAQ,MAAM,QAAQ,KAAK,SAAS,CACpD,QAAQ,KAAK,SAA+B,IAAI,kBAAkB,CAAC,KAAK,GAAG;AAE7E,QAAO;;AAGT,IAAM,qBAAqB,SAAkC;AAC3D,SAAQ,KAAK,MAAb;EACE,KAAK;EACL,KAAK,aACH,QAAO,KAAK;EACd,KAAK,QACH,QAAO;EACT,KAAK,QACH,QAAO,KAAK,OAAO,KAAK,SAAS,KAAK;EACxC,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,SACH,QAAO,KAAK,SAAS,IAAI,kBAAkB,CAAC,KAAK,GAAG;EACtD,KAAK,OACH,QAAO;EACT,QACE,QAAO,cAAc,QAAQ,MAAM,QAAQ,KAAK,SAAS,GACpD,KAAK,SAA+B,IAAI,kBAAkB,CAAC,KAAK,GAAG,GACpE;;;AAIV,IAAM,kBAAkB,SACtB,OAAO,SAAS,YAChB,SAAS,QACT,UAAU,QACV,OAAO,KAAK,SAAS,YACrB,uBAAuB,IAAI,KAAK,KAAK;AAEvC,IAAM,UAAU,SAAqD,KAAK,SAAS"}
1
+ {"version":3,"file":"md2pdf.js","names":[],"sources":["../src/md2pdf.ts"],"sourcesContent":["import {\n normalizeLinkHref,\n pt2mm,\n resolvePageSize,\n type BlankPdf,\n type PageOrientation,\n type PageSize,\n type Schema,\n type Template,\n} from '@pdfme/common';\nimport type {\n BlockContent,\n Blockquote,\n Code,\n Heading,\n Image,\n InlineCode,\n Link,\n List,\n ListItem,\n Paragraph,\n PhrasingContent,\n Root,\n RootContent,\n Table,\n TableCell,\n TableRow,\n} from 'mdast';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\n\ntype BoxSides = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n x?: number;\n y?: number;\n};\ntype ResolvedBoxSides = { top: number; right: number; bottom: number; left: number };\ntype HeadingDepth = 1 | 2 | 3 | 4 | 5 | 6;\ntype MarkdownMargin = number | [number, number, number, number] | BoxSides;\n\nexport type Md2PdfOptions = {\n page?: {\n size?: PageSize;\n orientation?: PageOrientation;\n margin?: MarkdownMargin;\n };\n basePdf?: BlankPdf;\n style?: {\n fontName?: string;\n fontSize?: number;\n lineHeight?: number;\n fontColor?: string;\n headingScale?: Partial<Record<HeadingDepth, number>>;\n };\n};\n\nexport type Md2PdfResult = {\n template: Template;\n inputs: Record<string, string>[];\n};\n\ntype Builder = {\n basePdf: BlankPdf;\n contentFrame: { x: number; y: number; width: number; height: number };\n cursorY: number;\n fontName?: string;\n fontSize: number;\n lineHeight: number;\n fontColor: string;\n headingScale: Record<HeadingDepth, number>;\n nameCounters: Record<string, number>;\n schemas: Schema[];\n usedNames: Set<string>;\n};\n\ntype TableCellStyle = {\n fontName?: string;\n alignment: 'left' | 'center' | 'right';\n verticalAlignment: 'top' | 'middle' | 'bottom';\n fontSize: number;\n lineHeight: number;\n characterSpacing: number;\n fontColor: string;\n backgroundColor: string;\n borderColor: string;\n borderWidth: ResolvedBoxSides;\n padding: ResolvedBoxSides;\n alternateBackgroundColor?: string;\n};\n\nconst DEFAULT_PAGE_MARGIN: [number, number, number, number] = [20, 15, 20, 15];\nconst DEFAULT_FONT_SIZE = 10;\nconst DEFAULT_LINE_HEIGHT = 1.25;\nconst DEFAULT_FONT_COLOR = '#111827';\nconst DEFAULT_HEADING_SCALE: Record<HeadingDepth, number> = {\n 1: 2,\n 2: 1.65,\n 3: 1.35,\n 4: 1.15,\n 5: 1,\n 6: 1,\n};\nconst BLOCK_GAP = 4;\nconst LIST_ITEM_SPACING = 1.4;\nconst TABLE_HEADER_HEIGHT = 8.5;\nconst TABLE_ROW_HEIGHT = 7.5;\nconst IMAGE_HEIGHT = 45;\nconst CODE_BLOCK_BACKGROUND_COLOR = '#f6f8fa';\nconst CODE_BLOCK_BORDER_COLOR = '#d0d7de';\nconst CODE_BLOCK_BORDER_WIDTH = 0.1;\nconst CODE_BLOCK_PADDING: ResolvedBoxSides = { top: 2, right: 3, bottom: 2, left: 3 };\nconst BLOCKQUOTE_BACKGROUND_COLOR = '#f8fafc';\nconst BLOCKQUOTE_BORDER_COLOR = '#d0d7de';\nconst BLOCKQUOTE_BORDER_WIDTH: ResolvedBoxSides = { top: 0, right: 0, bottom: 0, left: 0.8 };\nconst BLOCKQUOTE_PADDING: ResolvedBoxSides = { top: 2, right: 3, bottom: 2, left: 3 };\nconst HORIZONTAL_RULE_COLOR = '#d0d7de';\nconst HORIZONTAL_RULE_HEIGHT = 0.25;\nconst TABLE_BORDER_COLOR = '#d0d7de';\nconst TABLE_CELL_BORDER_WIDTH = 0.1;\nconst TABLE_HEAD_BACKGROUND_COLOR = '#f6f8fa';\nconst TABLE_BODY_ALTERNATE_BACKGROUND_COLOR = '#f9fafb';\nconst TABLE_CELL_PADDING = 3;\n\nconst MARKDOWN_ESCAPE_PATTERN = /[\\\\*~`[\\]()]/g;\nconst DATA_IMAGE_PATTERN = /^data:image\\/(?:png|jpe?g);base64,/i;\nconst RENDERABLE_BLOCK_TYPES = new Set([\n 'blockquote',\n 'code',\n 'heading',\n 'html',\n 'list',\n 'paragraph',\n 'table',\n 'thematicBreak',\n]);\n\nconst markdownProcessor = unified().use(remarkParse).use(remarkGfm);\n\nexport const md2pdf = async (\n markdown: string,\n options: Md2PdfOptions = {},\n): Promise<Md2PdfResult> => {\n const root = markdownProcessor.parse(markdown) as Root;\n const builder = createBuilder(options);\n\n root.children.forEach((node) => renderBlock(node, builder));\n\n return {\n template: {\n basePdf: builder.basePdf,\n schemas: [builder.schemas],\n },\n inputs: [{}],\n };\n};\n\nconst createBuilder = (options: Md2PdfOptions): Builder => {\n const basePdf = options.basePdf ?? createBlankPdf(options);\n const [top, right, bottom, left] = basePdf.padding;\n const headingScale = { ...DEFAULT_HEADING_SCALE, ...options.style?.headingScale };\n\n return {\n basePdf,\n contentFrame: {\n x: left,\n y: top,\n width: Math.max(0, basePdf.width - left - right),\n height: Math.max(0, basePdf.height - top - bottom),\n },\n cursorY: top,\n fontName: options.style?.fontName,\n fontSize: options.style?.fontSize ?? DEFAULT_FONT_SIZE,\n lineHeight: options.style?.lineHeight ?? DEFAULT_LINE_HEIGHT,\n fontColor: options.style?.fontColor ?? DEFAULT_FONT_COLOR,\n headingScale,\n nameCounters: {},\n schemas: [],\n usedNames: new Set(),\n };\n};\n\nconst createBlankPdf = (options: Md2PdfOptions): BlankPdf => {\n const pageSize = resolvePageSize(\n options.page?.size ?? 'A4',\n options.page?.orientation ?? 'portrait',\n );\n return {\n width: pageSize.width,\n height: pageSize.height,\n padding: resolveMargin(options.page?.margin ?? DEFAULT_PAGE_MARGIN),\n };\n};\n\nconst resolveMargin = (margin: MarkdownMargin): [number, number, number, number] => {\n if (typeof margin === 'number') return [margin, margin, margin, margin];\n if (Array.isArray(margin)) return margin;\n\n const x = margin.x ?? 0;\n const y = margin.y ?? 0;\n return [margin.top ?? y, margin.right ?? x, margin.bottom ?? y, margin.left ?? x];\n};\n\nconst renderBlock = (node: RootContent | BlockContent, builder: Builder): void => {\n switch (node.type) {\n case 'heading':\n renderHeading(node, builder);\n return;\n case 'paragraph':\n renderParagraph(node, builder);\n return;\n case 'list':\n renderList(node, builder);\n return;\n case 'code':\n renderCode(node, builder);\n return;\n case 'blockquote':\n renderBlockquote(node, builder);\n return;\n case 'table':\n renderTable(node, builder);\n return;\n case 'thematicBreak':\n renderLine(builder);\n return;\n case 'html':\n case 'definition':\n case 'footnoteDefinition':\n case 'yaml':\n return;\n default:\n renderNestedBlocks(node, builder);\n }\n};\n\nconst renderNestedBlocks = (node: RootContent | BlockContent, builder: Builder): void => {\n if ('children' in node && Array.isArray(node.children)) {\n node.children.forEach((child) => {\n if (isBlockContent(child)) renderBlock(child, builder);\n });\n }\n};\n\nconst renderHeading = (node: Heading, builder: Builder): void => {\n const depth = Math.min(Math.max(node.depth, 1), 6) as HeadingDepth;\n const content = renderInlineChildren(node.children);\n const fontSize = builder.fontSize * builder.headingScale[depth];\n addTextSchema(builder, {\n name: resolveName(builder, slugify(toPlainText(node)) || `heading_${depth}`),\n content,\n fontSize,\n height: estimateTextHeight(content, fontSize, builder.lineHeight),\n gap: depth <= 1 ? 5 : depth === 2 ? 4.5 : BLOCK_GAP,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderParagraph = (node: Paragraph, builder: Builder): void => {\n if (node.children.length === 1 && node.children[0]?.type === 'image') {\n renderImage(node.children[0], builder);\n return;\n }\n\n const content = renderInlineChildren(node.children);\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderList = (node: List, builder: Builder): void => {\n const items = collectListItems(node);\n if (items.length === 0) return;\n\n const fontSize = builder.fontSize;\n const height =\n items.length * estimateTextHeight('', fontSize, builder.lineHeight) +\n Math.max(0, items.length - 1) * LIST_ITEM_SPACING;\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'list'),\n type: 'list',\n content: JSON.stringify(items),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '',\n listStyle: node.ordered ? 'ordered' : 'bullet',\n markerWidth: 6,\n markerGap: 2,\n indentSize: 6,\n itemSpacing: LIST_ITEM_SPACING,\n textFormat: 'inline-markdown',\n overflow: 'expand',\n };\n\n addSchema(builder, schema);\n};\n\nconst renderCode = (node: Code, builder: Builder): void => {\n const content = node.value;\n addTextSchema(builder, {\n content,\n backgroundColor: CODE_BLOCK_BACKGROUND_COLOR,\n borderColor: CODE_BLOCK_BORDER_COLOR,\n borderWidth: resolveBoxSides(CODE_BLOCK_BORDER_WIDTH),\n padding: CODE_BLOCK_PADDING,\n textFormat: 'plain',\n });\n};\n\nconst renderBlockquote = (node: Blockquote, builder: Builder): void => {\n const content = node.children\n .map((child) => blockToMarkdown(child))\n .join('\\n')\n .trim();\n\n if (!content.trim()) return;\n addTextSchema(builder, {\n content,\n backgroundColor: BLOCKQUOTE_BACKGROUND_COLOR,\n borderColor: BLOCKQUOTE_BORDER_COLOR,\n borderWidth: BLOCKQUOTE_BORDER_WIDTH,\n padding: BLOCKQUOTE_PADDING,\n textFormat: 'inline-markdown',\n });\n};\n\nconst renderTable = (node: Table, builder: Builder): void => {\n const rows = node.children.map(tableRowToStrings).filter((row) => row.length > 0);\n if (rows.length === 0) return;\n\n const columnCount = Math.max(...rows.map((row) => row.length));\n const head = normalizeRowLength(rows[0], columnCount);\n const body = rows.slice(1).map((row) => normalizeRowLength(row, columnCount));\n const height = TABLE_HEADER_HEIGHT + Math.max(1, body.length) * TABLE_ROW_HEIGHT;\n const columnWidths = Array.from({ length: columnCount }, () => 100 / columnCount);\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'table'),\n type: 'table',\n content: JSON.stringify(body),\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height,\n readOnly: true,\n showHead: true,\n repeatHead: false,\n head,\n headWidthPercentages: columnWidths,\n tableStyles: {\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: 0.2,\n },\n headStyles: {\n ...defaultCellStyle(builder),\n backgroundColor: TABLE_HEAD_BACKGROUND_COLOR,\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n },\n bodyStyles: {\n ...defaultCellStyle(builder),\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n alternateBackgroundColor: TABLE_BODY_ALTERNATE_BACKGROUND_COLOR,\n },\n columnStyles: {},\n };\n\n addSchema(builder, schema);\n};\n\nconst renderImage = (node: Image, builder: Builder): void => {\n if (!DATA_IMAGE_PATTERN.test(node.url)) {\n const link = normalizeLinkHref(node.url);\n const label = node.alt || node.title || node.url;\n addTextSchema(builder, {\n content: link\n ? `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(link)})`\n : escapeInlineMarkdown(label),\n textFormat: 'inline-markdown',\n });\n return;\n }\n\n const schema: Schema = {\n name: resolveAutoName(builder, 'image'),\n type: 'image',\n content: node.url,\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: IMAGE_HEIGHT,\n readOnly: true,\n };\n\n addSchema(builder, schema);\n};\n\nconst renderLine = (builder: Builder): void => {\n const schema: Schema = {\n name: resolveAutoName(builder, 'line'),\n type: 'line',\n position: { x: builder.contentFrame.x, y: builder.cursorY },\n width: builder.contentFrame.width,\n height: HORIZONTAL_RULE_HEIGHT,\n readOnly: true,\n color: HORIZONTAL_RULE_COLOR,\n };\n\n addSchema(builder, schema);\n};\n\nconst addTextSchema = (\n builder: Builder,\n options: {\n name?: string;\n content: string;\n fontSize?: number;\n height?: number;\n gap?: number;\n backgroundColor?: string;\n borderColor?: string;\n borderWidth?: ResolvedBoxSides;\n padding?: ResolvedBoxSides;\n textFormat?: 'plain' | 'inline-markdown';\n x?: number;\n width?: number;\n },\n): void => {\n const fontSize = options.fontSize ?? builder.fontSize;\n const content = options.content;\n const boxVerticalInset = getBoxVerticalInset(options);\n const schema: Schema = {\n name: options.name ?? resolveAutoName(builder, 'text'),\n type: 'text',\n content,\n position: { x: options.x ?? builder.contentFrame.x, y: builder.cursorY },\n width: options.width ?? builder.contentFrame.width,\n height:\n (options.height ?? estimateTextHeight(content, fontSize, builder.lineHeight)) +\n boxVerticalInset,\n readOnly: true,\n alignment: 'left',\n verticalAlignment: 'top',\n fontSize,\n fontName: builder.fontName,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: options.backgroundColor ?? '',\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n padding: options.padding,\n textFormat: options.textFormat ?? 'plain',\n overflow: 'expand',\n };\n\n addSchema(builder, schema, options.gap);\n};\n\nconst addSchema = (builder: Builder, schema: Schema, gap = BLOCK_GAP): void => {\n builder.schemas.push(schema);\n builder.cursorY += schema.height + gap;\n};\n\nconst collectListItems = (node: List, level = 0): string[] =>\n node.children.flatMap((item) => {\n const prefix = typeof item.checked === 'boolean' ? `[${item.checked ? 'x' : ' '}] ` : '';\n const text = item.children\n .filter((child) => child.type !== 'list')\n .map((child) => blockToMarkdown(child))\n .join(' ')\n .trim();\n const current = `${'\\t'.repeat(level)}${prefix}${text}`;\n const nested = item.children\n .filter(isList)\n .flatMap((child) => collectListItems(child, level + 1));\n return [current, ...nested];\n });\n\nconst blockToMarkdown = (node: RootContent | BlockContent): string => {\n switch (node.type) {\n case 'paragraph':\n case 'heading':\n return renderInlineChildren(node.children);\n case 'code':\n return node.value;\n case 'list':\n return collectListItems(node).join('\\n');\n case 'blockquote':\n return node.children.map(blockToMarkdown).join('\\n');\n case 'table':\n return node.children.map((row) => tableRowToStrings(row).join(' | ')).join('\\n');\n case 'thematicBreak':\n return '---';\n default:\n return '';\n }\n};\n\nconst renderInlineChildren = (children: PhrasingContent[]): string =>\n children.map(renderInline).join('');\n\nconst renderInline = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n return escapeInlineMarkdown(node.value);\n case 'emphasis':\n return `*${renderInlineChildren(node.children)}*`;\n case 'strong':\n return `**${renderInlineChildren(node.children)}**`;\n case 'delete':\n return `~~${renderInlineChildren(node.children)}~~`;\n case 'inlineCode':\n return renderInlineCode(node);\n case 'break':\n return '\\n';\n case 'link':\n return renderLink(node);\n case 'image':\n return renderInlineImage(node);\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? renderInlineChildren(node.children as PhrasingContent[])\n : '';\n }\n};\n\nconst renderInlineCode = (node: InlineCode): string => `\\`${node.value.replaceAll('`', '\\\\`')}\\``;\n\nconst renderLink = (node: Link): string => {\n const label = renderInlineChildren(node.children);\n const href = normalizeLinkHref(node.url);\n if (!href) return label;\n return `[${label}](${escapeLinkDestination(href)})`;\n};\n\nconst renderInlineImage = (node: Image): string => {\n const label = node.alt || node.title || node.url;\n const href = normalizeLinkHref(node.url);\n if (!href) return escapeInlineMarkdown(label);\n return `[${escapeInlineMarkdown(label)}](${escapeLinkDestination(href)})`;\n};\n\nconst tableRowToStrings = (row: TableRow): string[] => row.children.map(tableCellToString);\n\nconst tableCellToString = (cell: TableCell): string =>\n cell.children.map(inlineToPlainText).join('');\n\nconst normalizeRowLength = (row: string[], columnCount: number): string[] =>\n Array.from({ length: columnCount }, (_, index) => row[index] ?? '');\n\nconst defaultCellStyle = (builder: Builder): TableCellStyle => ({\n fontName: builder.fontName,\n alignment: 'left',\n verticalAlignment: 'middle',\n fontSize: builder.fontSize,\n lineHeight: builder.lineHeight,\n characterSpacing: 0,\n fontColor: builder.fontColor,\n backgroundColor: '#ffffff',\n borderColor: TABLE_BORDER_COLOR,\n borderWidth: resolveBoxSides(TABLE_CELL_BORDER_WIDTH),\n padding: resolveBoxSides(TABLE_CELL_PADDING),\n});\n\nconst resolveBoxSides = (value: number | BoxSides): ResolvedBoxSides => {\n if (typeof value === 'number') return { top: value, right: value, bottom: value, left: value };\n const x = value.x ?? 0;\n const y = value.y ?? 0;\n return {\n top: value.top ?? y,\n right: value.right ?? x,\n bottom: value.bottom ?? y,\n left: value.left ?? x,\n };\n};\n\nconst getBoxVerticalInset = (value: {\n borderWidth?: ResolvedBoxSides;\n padding?: ResolvedBoxSides;\n}) =>\n (value.borderWidth?.top ?? 0) +\n (value.borderWidth?.bottom ?? 0) +\n (value.padding?.top ?? 0) +\n (value.padding?.bottom ?? 0);\n\nconst resolveAutoName = (builder: Builder, prefix: string): string => {\n let name = '';\n do {\n builder.nameCounters[prefix] = (builder.nameCounters[prefix] ?? 0) + 1;\n name = `${prefix}_${builder.nameCounters[prefix]}`;\n } while (builder.usedNames.has(name));\n builder.usedNames.add(name);\n return name;\n};\n\nconst resolveName = (builder: Builder, baseName: string): string => {\n let name = baseName;\n let index = 0;\n while (builder.usedNames.has(name)) {\n index += 1;\n name = `${baseName}_${index}`;\n }\n builder.usedNames.add(name);\n return name;\n};\n\nconst estimateTextHeight = (content: string, fontSize: number, lineHeight: number): number => {\n const lineCount = Math.max(1, content.split('\\n').length);\n return Math.max(4, lineCount * pt2mm(fontSize * lineHeight) + 1);\n};\n\nconst escapeInlineMarkdown = (value: string): string =>\n value.replace(MARKDOWN_ESCAPE_PATTERN, (match) => `\\\\${match}`);\n\nconst escapeLinkDestination = (href: string): string =>\n encodeURI(href).replace(/[\\\\()]/g, (match) => `\\\\${match}`);\n\nconst slugify = (value: string): string =>\n value\n .trim()\n .toLowerCase()\n .replace(/[^\\p{Letter}\\p{Number}]+/gu, '-')\n .replace(/^-|-$/g, '');\n\nconst toPlainText = (node: Heading): string =>\n node.children\n .map((child) => {\n if ('value' in child && typeof child.value === 'string') return child.value;\n if ('alt' in child && typeof child.alt === 'string') return child.alt;\n if ('children' in child && Array.isArray(child.children)) {\n return (child.children as PhrasingContent[])\n .map((grandchild) => toPlainInlineText(grandchild))\n .join('');\n }\n return '';\n })\n .join('');\n\nconst toPlainInlineText = (node: PhrasingContent): string => {\n if ('value' in node && typeof node.value === 'string') return node.value;\n if ('alt' in node && typeof node.alt === 'string') return node.alt;\n if ('children' in node && Array.isArray(node.children)) {\n return (node.children as PhrasingContent[]).map(toPlainInlineText).join('');\n }\n return '';\n};\n\nconst inlineToPlainText = (node: PhrasingContent): string => {\n switch (node.type) {\n case 'text':\n case 'inlineCode':\n return node.value;\n case 'break':\n return '\\n';\n case 'image':\n return node.alt || node.title || node.url;\n case 'link':\n case 'emphasis':\n case 'strong':\n case 'delete':\n return node.children.map(inlineToPlainText).join('');\n case 'html':\n return '';\n default:\n return 'children' in node && Array.isArray(node.children)\n ? (node.children as PhrasingContent[]).map(inlineToPlainText).join('')\n : '';\n }\n};\n\nconst isBlockContent = (node: unknown): node is BlockContent =>\n typeof node === 'object' &&\n node !== null &&\n 'type' in node &&\n typeof node.type === 'string' &&\n RENDERABLE_BLOCK_TYPES.has(node.type);\n\nconst isList = (node: ListItem['children'][number]): node is List => node.type === 'list';\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/converter",
3
- "version": "6.1.2-dev.9",
3
+ "version": "6.1.3-dev.2",
4
4
  "description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
5
5
  "keywords": [
6
6
  "pdf",