jspdf-md-renderer 3.3.3 → 3.4.1

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.
package/dist/index.d.ts CHANGED
@@ -1,100 +1 @@
1
- import { default as default_2 } from 'jspdf';
2
- import { jsPDFOptions } from 'jspdf';
3
- import { UserOptions } from 'jspdf-autotable';
4
-
5
- declare type FontItem = {
6
- name: string;
7
- style: string;
8
- };
9
-
10
- /**
11
- * Parses markdown into tokens and converts to a custom parsed structure.
12
- *
13
- * @param text - The markdown content to parse.
14
- * @returns Parsed markdown elements.
15
- */
16
- export declare const MdTextParser: (text: string) => Promise<ParsedElement[]>;
17
-
18
- /**
19
- * Renders parsed markdown text into jsPDF document.
20
- *
21
- * @param doc - The jsPDF document.
22
- * @param text - The markdown content to render.
23
- * @param options - The render options (fonts, page margins, etc.).
24
- */
25
- export declare const MdTextRender: (doc: default_2, text: string, options: RenderOption) => Promise<void>;
26
-
27
- declare type ParsedElement = {
28
- type: string;
29
- content?: string;
30
- depth?: number;
31
- items?: ParsedElement[];
32
- ordered?: boolean;
33
- start?: number;
34
- lang?: string;
35
- code?: string;
36
- src?: string;
37
- alt?: string;
38
- href?: string;
39
- text?: string;
40
- header?: ParsedElement[];
41
- rows?: ParsedElement[][];
42
- data?: string;
43
- width?: number;
44
- height?: number;
45
- align?: 'left' | 'center' | 'right';
46
- naturalWidth?: number;
47
- naturalHeight?: number;
48
- };
49
-
50
- export declare type RenderOption = {
51
- cursor: {
52
- x: number;
53
- y: number;
54
- };
55
- page: {
56
- format?: string | number[];
57
- unit?: jsPDFOptions['unit'];
58
- orientation?: jsPDFOptions['orientation'];
59
- maxContentWidth: number;
60
- maxContentHeight: number;
61
- lineSpace: number;
62
- defaultLineHeightFactor: number;
63
- defaultFontSize: number;
64
- defaultTitleFontSize: number;
65
- topmargin: number;
66
- xpading: number;
67
- xmargin: number;
68
- indent: number;
69
- };
70
- font: {
71
- bold: FontItem;
72
- regular: FontItem;
73
- light: FontItem;
74
- };
75
- content?: {
76
- textAlignment: 'left' | 'right' | 'center' | 'justify';
77
- };
78
- codespan?: {
79
- /** Background color for inline code. Default: '#EEEEEE' */
80
- backgroundColor?: string;
81
- /** Padding around inline code text. Default: 0.5 */
82
- padding?: number;
83
- /** Whether to show background rectangle. Default: true */
84
- showBackground?: boolean;
85
- /** Font size scale factor for code. Default: 0.9 */
86
- fontSizeScale?: number;
87
- };
88
- link?: {
89
- linkColor: [number, number, number];
90
- };
91
- table?: UserOptions;
92
- image?: {
93
- /** Default alignment for images: 'left' | 'center' | 'right'. Default: 'left' */
94
- defaultAlign?: 'left' | 'center' | 'right';
95
- };
96
- pageBreakHandler?: (doc: default_2) => void;
97
- endCursorYHandler: (y: number) => void;
98
- };
99
-
100
1
  export { }
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`marked`),l=require(`jspdf-autotable`);l=s(l);var u=function(e){return e.Heading=`heading`,e.Paragraph=`paragraph`,e.List=`list`,e.ListItem=`list_item`,e.Blockquote=`blockquote`,e.Code=`code`,e.CodeSpan=`codespan`,e.Table=`table`,e.Html=`html`,e.Hr=`hr`,e.Image=`image`,e.Link=`link`,e.Strong=`strong`,e.Em=`em`,e.TableHeader=`table_header`,e.TableCell=`table_cell`,e.Raw=`raw`,e.Text=`text`,e}({}),d=`__jmr_`,f=/(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g,p=/(\w+)\s*=\s*(\w+)/g,m=[`left`,`center`,`right`],h=e=>{let t=[];return e.width!==void 0&&t.push(`w=${e.width}`),e.height!==void 0&&t.push(`h=${e.height}`),e.align&&t.push(`a=${e.align}`),t.length>0?`#${d}${t.join(`&`)}`:``},g=e=>{let t={},n;for(;(n=p.exec(e))!==null;){let e=n[1].toLowerCase(),r=n[2];switch(e){case`width`:case`w`:{let e=parseInt(r,10);!isNaN(e)&&e>0&&(t.width=e);break}case`height`:case`h`:{let e=parseInt(r,10);!isNaN(e)&&e>0&&(t.height=e);break}case`align`:{let e=r.toLowerCase();m.includes(e)&&(t.align=e);break}}}return t},_=e=>e.replace(f,(e,t,n,r,i)=>`${t}${n}${h(g(i))}${r}`),v=e=>{let t=e.indexOf(`#${d}`);if(t===-1)return{cleanHref:e,attrs:{}};let n=e.substring(0,t),r=e.substring(t+1+6),i={},a=r.split(`&`);for(let e of a){let[t,n]=e.split(`=`);switch(t){case`w`:{let e=parseInt(n,10);!isNaN(e)&&e>0&&(i.width=e);break}case`h`:{let e=parseInt(n,10);!isNaN(e)&&e>0&&(i.height=e);break}case`a`:m.includes(n)&&(i.align=n);break}}return{cleanHref:n,attrs:i}},y=async e=>{let t=_(e);return b(await c.marked.lexer(t,{async:!0,gfm:!0}))},b=e=>{let t=[];return e.forEach(e=>{try{let n=x[e.type];n?t.push(n(e)):t.push({type:u.Raw,content:e.raw})}catch(t){console.error(`Failed to handle token ==>`,e,t)}}),t},x={[u.Heading]:e=>({type:u.Heading,depth:e.depth,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Paragraph]:e=>({type:u.Paragraph,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.List]:e=>({type:u.List,ordered:e.ordered,start:e.start,items:e.items?b(e.items):[]}),[u.ListItem]:e=>({type:u.ListItem,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Code]:e=>({type:u.Code,lang:e.lang,code:e.text}),[u.Table]:e=>({type:u.Table,header:e.header.map(e=>({type:u.TableHeader,content:e.text})),rows:e.rows.map(e=>e.map(e=>({type:u.TableCell,content:e.text})))}),[u.Image]:e=>{let{cleanHref:t,attrs:n}=v(e.href);return{type:u.Image,src:t,alt:e.text,width:n.width,height:n.height,align:n.align}},[u.Link]:e=>({type:u.Link,href:e.href,text:e.text,items:e.tokens?b(e.tokens):[]}),[u.Strong]:e=>({type:u.Strong,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Em]:e=>({type:u.Em,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Text]:e=>({type:u.Text,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Hr]:e=>({type:u.Hr,content:e.raw,items:e.tokens?b(e.tokens):[]}),[u.CodeSpan]:e=>({type:u.CodeSpan,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Blockquote]:e=>({type:u.Blockquote,content:e.text,items:e.tokens?b(e.tokens):[]})},S=class{static{this.cursor={x:0,y:0}}static{this.lastContentY_=0}static{this.inlineLock=!1}static initialize(e){this.options_=e,this.cursor={x:e.cursor.x,y:e.cursor.y},this.lastContentY_=e.cursor.y}static getCursor(){return this.cursor}static setCursor(e){this.cursor=e}static get options(){return this.options_}static get isInlineLockActive(){return this.inlineLock}static activateInlineLock(){this.inlineLock=!0}static deactivateInlineLock(){this.inlineLock=!1}static updateX(e,t=`set`){t===`set`?this.cursor.x=e:t===`add`&&(this.cursor.x+=e)}static updateY(e,t=`set`){t===`set`?this.cursor.y=e:t===`add`&&(this.cursor.y+=e)}static recordContentY(e){this.lastContentY_=e===void 0?this.cursor.y:e}static get lastContentY(){return this.lastContentY_}static get X(){return this.cursor.x}static get Y(){return this.cursor.y}},C=e=>e.getTextDimensions(`H`).h*S.options.page.defaultLineHeightFactor,w=e=>e.getTextDimensions(`H`).w*S.options.page.defaultLineHeightFactor,T=(e,t,n,r)=>{let i=6-(t?.depth??0)>0?6-(t?.depth??0):1;if(e.setFontSize(S.options.page.defaultFontSize+i),t?.items&&t?.items.length>0)for(let e of t?.items??[])r(e,n,!1);else{let r=C(e);e.text(t?.content??``,S.X+n,S.Y,{align:`left`,maxWidth:S.options.page.maxContentWidth-n,baseline:`top`}),S.recordContentY(S.Y+r),S.updateY(r,`add`)}e.setFontSize(S.options.page.defaultFontSize),S.updateX(S.options.page.xpading,`set`)},E=e=>{typeof S.options.pageBreakHandler==`function`?S.options.pageBreakHandler(e):e.addPage(S.options.page?.format,S.options.page?.orientation),S.updateY(S.options.page.topmargin),S.updateX(S.options.page.xpading)},D=96,O=(e,t=`mm`)=>{switch(t){case`pt`:return e*72/D;case`in`:return e/D;case`px`:return e;default:return e*25.4/D}},k=e=>{try{let t=``;if(e.includes(`base64,`)){let n=e.split(`base64,`)[1];t=typeof window<`u`&&typeof window.atob==`function`?decodeURIComponent(escape(window.atob(n))):typeof Buffer<`u`?Buffer.from(n,`base64`).toString(`utf-8`):decodeURIComponent(escape(atob(n)))}else t=decodeURIComponent(e.split(`,`)[1]||``);let n=t.match(/<svg[^>]*\swidth=(?:'|")([0-9.]+)[a-zA-Z]*(?:'|")/i),r=t.match(/<svg[^>]*\sheight=(?:'|")([0-9.]+)[a-zA-Z]*(?:'|")/i),i=t.match(/<svg[^>]*\sviewBox=(?:'|")[^'"]*(?:'|")/i),a=n?parseFloat(n[1]):0,o=r?parseFloat(r[1]):0;if((!a||!o)&&i){let e=i[0].match(/viewBox=(?:'|")([^'"]+)(?:'|")/i);if(e){let t=e[1].split(/[ ,]+/).filter(Boolean).map(parseFloat);t.length>=4&&(a||=t[2],o||=t[3])}}if(a>0&&o>0)return{width:a,height:o}}catch(e){console.warn(`Failed to extract SVG dimensions:`,e)}return null},A=(e,t,n,r,i=`mm`)=>{if(!t.data)return{finalWidth:0,finalHeight:0};let a=t.naturalWidth||0,o=t.naturalHeight||0;if(!a||!o)if(t.data.startsWith(`data:image/svg`)){let e=k(t.data);e&&(a=e.width,o=e.height)}else try{let n=e.getImageProperties(t.data);a=n.width,o=n.height}catch(e){console.warn(`Failed to get image properties for intrinsic sizing:`,e)}let s=o>0?a/o:1,c,l;if(t.width&&t.height?(c=O(t.width,i),l=O(t.height,i)):t.width?(c=O(t.width,i),l=c/s):t.height?(l=O(t.height,i),c=l*s):(c=O(a,i),l=O(o,i)),c>n){let e=n/c;c=n,l*=e}if(l>r){let e=r/l;l=r,c*=e}return{finalWidth:c,finalHeight:l}},j=async e=>{for(let t of e){if(t.type===u.Image&&t.src)try{if(t.src.startsWith(`data:`))t.data=t.src;else{let e=await fetch(t.src);if(!e.ok)throw Error(`Failed to fetch image: ${e.statusText}`);let n=await e.blob();t.data=await new Promise((e,t)=>{let r=new FileReader;r.onloadend=()=>{typeof r.result==`string`?e(r.result):t(Error(`Failed to convert image to base64 string`))},r.onerror=t,r.readAsDataURL(n)})}t.data&&t.data.startsWith(`data:image/svg`)&&typeof window<`u`&&typeof document<`u`&&(t.data=await new Promise(e=>{let n=new Image;n.onload=()=>{let r=document.createElement(`canvas`),i=k(t.data),a=i?i.width:n.width||300,o=i?i.height:n.height||150;t.naturalWidth=a,t.naturalHeight=o,r.width=a*4,r.height=o*4;let s=r.getContext(`2d`);s?(s.scale(4,4),s.drawImage(n,0,0,a,o),e(r.toDataURL(`image/png`))):e(t.data)},n.onerror=()=>e(t.data),n.src=t.data}))}catch(e){console.warn(`[jspdf-md-renderer] Warning: Failed to load image at ${t.src}. It will be skipped.`,e)}t.items&&t.items.length>0&&await j(t.items)}},M=class{static getCodespanOptions(){let e=S.options.codespan??{};return{backgroundColor:e.backgroundColor??`#EEEEEE`,padding:e.padding??.5,showBackground:e.showBackground!==!1,fontSizeScale:e.fontSizeScale??.9}}static applyStyle(e,t){let n=e.getFont().fontName,r=e.getFontSize(),i=()=>{let e=S.options.font.bold?.name;return e&&e!==``?e:n},a=()=>{let e=S.options.font.regular?.name;return e&&e!==``?e:n};switch(t){case`bold`:e.setFont(i(),S.options.font.bold?.style||`bold`);break;case`italic`:e.setFont(a(),`italic`);break;case`bolditalic`:e.setFont(i(),`bolditalic`);break;case`codespan`:e.setFont(`courier`,`normal`),e.setFontSize(r*this.getCodespanOptions().fontSizeScale);break;default:e.setFont(a(),e.getFont().fontStyle);break}}static measureWordWidth(e,t,n){let r=e.getFont(),i=e.getFontSize();this.applyStyle(e,n);let a=e.getTextWidth(t),o=e.getCharSpace?.()??0,s=a+t.length*o;return e.setFont(r.fontName,r.fontStyle),e.setFontSize(i),s}static getStyleFromType(e,t){switch(e){case`strong`:return t===`italic`?`bolditalic`:`bold`;case`em`:return t===`bold`?`bolditalic`:`italic`;case`codespan`:return`codespan`;default:return t||`normal`}}static flattenToWords(e,t,n=`normal`,r=!1,i){let a=[];for(let o of t){let t=this.getStyleFromType(o.type,n),s=o.type===`link`||r,c=o.href||i;if(o.items&&o.items.length>0){let n=this.flattenToWords(e,o.items,t,s,c);a.push(...n)}else if(o.type===`image`){let n=S.options.page.maxContentHeight-S.options.page.topmargin,{finalWidth:r,finalHeight:i}=A(e,o,S.options.page.maxContentWidth-S.options.page.indent*0,n,S.options.page.unit||`mm`);a.push({text:``,width:r,style:t,isLink:s,href:c,linkColor:s?S.options.link?.linkColor||[0,0,255]:void 0,isImage:!0,imageElement:o,imageHeight:i})}else{let n=o.content||o.text||``;if(!n)continue;if(t===`codespan`){let r=n.trim();r&&a.push({text:r,width:this.measureWordWidth(e,r,t),style:t,isLink:s,href:c,linkColor:s?S.options.link?.linkColor||[0,0,255]:void 0});continue}let r=n.split(/\s+/).filter(e=>e.length>0);if(r.length===0)continue;for(let n=0;n<r.length;n++){let i=r[n];a.push({text:i,width:this.measureWordWidth(e,i,t),style:t,isLink:s,href:c,linkColor:s?S.options.link?.linkColor||[0,0,255]:void 0})}}}return a}static breakIntoLines(e,t,n){let r=[],i=[],a=0,o=0,s=C(e)*S.options.page.defaultLineHeightFactor,c=e.getTextWidth(` `);for(let l=0;l<t.length;l++){let u=t[l],d=i.length>0?c+u.width:u.width,f=u.isImage&&u.imageHeight?u.imageHeight:C(e)*S.options.page.defaultLineHeightFactor;o+d>n&&i.length>0?(r.push({words:i,totalTextWidth:a,isLastLine:!1,lineHeight:s}),i=[u],a=u.width,o=u.width,s=f):(i.push(u),a+=u.width,o+=d,s=Math.max(s,f))}return i.length>0&&r.push({words:i,totalTextWidth:a,isLastLine:!0,lineHeight:s}),r}static renderWord(e,t,n,r){let i=e.getFont(),a=e.getFontSize(),o=e.getTextColor();if(this.applyStyle(e,t.style),t.isLink&&t.linkColor&&e.setTextColor(...t.linkColor),t.isImage&&t.imageElement&&t.imageElement.data)try{let i=`JPEG`;if(t.imageElement.data.startsWith(`data:image/png`))i=`PNG`;else if(t.imageElement.data.startsWith(`data:image/webp`))i=`WEBP`;else if(t.imageElement.data.startsWith(`data:image/gif`))i=`GIF`;else if(t.imageElement.src){let e=t.imageElement.src.split(`?`)[0].split(`#`)[0].split(`.`).pop()?.toUpperCase();e&&[`PNG`,`JPEG`,`JPG`,`WEBP`,`GIF`].includes(e)&&(i=e===`JPG`?`JPEG`:e)}if(t.width>0&&(t.imageHeight||0)>0){let a=t.imageHeight||0,o=r;e.addImage(t.imageElement.data,i,n,o,t.width,a)}}catch(e){console.warn(`Failed to render inline image`,e)}else{if(t.style===`codespan`){let i=this.getCodespanOptions();if(i.showBackground){let a=C(e),o=i.padding;e.setFillColor(i.backgroundColor),e.rect(n-o,r-o,t.width+o*2,a+o*2,`F`),e.setFillColor(`#000000`)}}e.text(t.text,n,r,{baseline:`top`})}if(t.isLink&&t.href){let i=t.isImage&&t.imageHeight?t.imageHeight:C(e);e.link(n,r,t.width,i,{url:t.href})}e.setFont(i.fontName,i.fontStyle),e.setFontSize(a),e.setTextColor(o)}static renderAlignedLine(e,t,n,r,i,a=`left`){let{words:o,totalTextWidth:s,isLastLine:c}=t;if(o.length===0)return;let l=e.getTextWidth(` `),u=n,d=l,f=s+(o.length-1)*l;switch(a){case`right`:u=n+i-f;break;case`center`:u=n+(i-f)/2;break;case`justify`:!c&&o.length>1&&(d=(i-s)/(o.length-1));break;default:break}let p=u,m=C(e)*S.options.page.defaultLineHeightFactor;for(let n=0;n<o.length;n++){let i=o[n],a=r,s=i.isImage&&i.imageHeight?i.imageHeight:m;i.isImage?a=r:s<t.lineHeight&&(a=r+(t.lineHeight-s)),this.renderWord(e,i,p,a),p+=i.width,n<o.length-1&&(p+=d)}}static renderStyledParagraph(e,t,n,r,i,a){let o=a??S.options.content?.textAlignment??`left`,s=this.flattenToWords(e,t);if(s.length===0)return;let c=this.breakIntoLines(e,s,i),l=r;for(let t of c)l+t.lineHeight>S.options.page.maxContentHeight&&(E(e),l=S.Y),this.renderAlignedLine(e,t,n,l,i,o),S.recordContentY(l+t.lineHeight),l+=t.lineHeight,S.updateY(t.lineHeight,`add`);let u=c[c.length-1];if(u){let t=u.totalTextWidth+(u.words.length-1)*e.getTextWidth(` `);S.updateX(n+t,`set`)}}static renderJustifiedParagraph(e,t,n,r,i){this.renderStyledParagraph(e,t,n,r,i)}},N=class{static renderText(e,t,n=S.X,r=S.Y,i,a=!1){let o=e.splitTextToSize(t,i),s=C(e),c=s*S.options.page.defaultLineHeightFactor,l=r;for(let t=0;t<o.length;t++){let r=o[t];l+c>S.options.page.maxContentHeight&&(E(e),l=S.Y),a?t===o.length-1?e.text(r,n,l,{baseline:`top`}):e.text(r,n,l,{maxWidth:i,align:`justify`,baseline:`top`}):e.text(r,n,l,{baseline:`top`}),S.recordContentY(l+s),l+=c,S.updateY(c,`add`)}return l}},P=(e,t,n,r)=>{S.activateInlineLock(),e.setFontSize(S.options.page.defaultFontSize);let i=S.options.page.maxContentWidth-n;if(t?.items&&t?.items.length>0){if(t.items.length===1&&t.items[0].type===`image`){r(t.items[0],n,!1),S.updateX(S.options.page.xpading),S.deactivateInlineLock();return}let a=[`strong`,`em`,`text`,`codespan`,`link`,`image`];if(t.items.some(e=>!a.includes(e.type))){let o=[],s=()=>{o.length>0&&(M.renderStyledParagraph(e,o,S.X+n,S.Y,i),o.length=0)};for(let e of t.items)a.includes(e.type)?o.push(e):(s(),r(e,n,!1));s()}else M.renderStyledParagraph(e,t.items,S.X+n,S.Y,i)}else{let r=t.content??``,a=S.options.content?.textAlignment??`left`;r.trim()&&N.renderText(e,r,S.X+n,S.Y,i,a===`justify`)}S.updateX(S.options.page.xpading),S.deactivateInlineLock()},F=(e,t,n,r)=>{e.setFontSize(S.options.page.defaultFontSize);for(let[e,i]of t?.items?.entries()??[]){let a=t.ordered?(t.start??0)+e:t.start;r(i,n+1,!0,a,t.ordered)}},I=(e,t,n,r,i,a)=>{S.Y+C(e)>=S.options.page.maxContentHeight&&E(e);let o=S.options,s=n*o.page.indent,c=a?`${i}. `:`• `,l=o.page.xpading;S.updateX(l,`set`),e.setFont(o.font.regular.name,o.font.regular.style),e.text(c,l+s,S.Y,{baseline:`top`});let d=e.getTextWidth(c),f=l+s+d,p=o.page.maxContentWidth-s-d;if(t.items&&t.items.length>0){let o=[],s=()=>{o.length>0&&(M.renderStyledParagraph(e,o,f,S.Y,p),o.length=0,S.updateX(l,`set`))};for(let e of t.items)e.type===u.List?(s(),r(e,n,!0,i,e.ordered??!1)):e.type===u.ListItem?(s(),r(e,n,!0,i,a)):o.push(e);s()}else if(t.content){let n=o.content?.textAlignment??`left`;N.renderText(e,t.content,f,S.Y,p,n===`justify`)}},L=(e,t,n,r,i,a,o,s=!0)=>{if(t?.items&&t?.items.length>0)for(let e of t?.items??[])i(e,n,r,a,o,s);else{let i=S.options,c=n*i.page.indent,l=r?o?`${a}. `:`• `:``,u=t.content||``,d=i.page.xpading;if(!u&&!l)return;if(!u.trim()&&!l){let t=(u.match(/\n/g)||[]).length;if(t>1){let n=(t-1)*(e.getTextDimensions(`A`).h*i.page.defaultLineHeightFactor);S.Y+n>i.page.maxContentHeight?E(e):(S.updateY(n,`add`),S.recordContentY(S.Y))}return}if(S.updateX(d,`set`),r&&l){let t=e.getTextWidth(l),n=i.page.maxContentWidth-c-t;e.setFont(i.font.regular.name,i.font.regular.style),e.text(l,d+c,S.Y,{baseline:`top`}),N.renderText(e,u,d+c+t,S.Y,n,s)}else{let t=i.page.maxContentWidth-c;N.renderText(e,u,d+c,S.Y,t,s)}S.updateX(d,`set`)}},R=e=>{let t=e.internal.pageSize.getWidth();e.setLineDashPattern([1,1],0),e.setLineWidth(.1),e.line(S.options.page.xpading,S.Y,t-S.options.page.xpading,S.Y),e.setLineWidth(.1),e.setLineDashPattern([],0),S.updateY(C(e),`add`)},z=(e,t,n)=>{let r=e.getFont(),i=e.getFontSize();e.setFont(`courier`,`normal`);let a=S.options.page.defaultFontSize*.9;e.setFontSize(a);let o=n*S.options.page.indent,s=S.options.page.maxContentWidth-o-8,c=e.getLineHeightFactor(),l=a/e.internal.scaleFactor*c,u=(t.code??``).replace(/[\r\n\s]+$/,``);if(!u){e.setFont(r.fontName,r.fontStyle),e.setFontSize(i);return}let d=e.splitTextToSize(u,s);for(;d.length>0&&d[d.length-1].trim()===``;)d.pop();if(d.length===0){e.setFont(r.fontName,r.fontStyle),e.setFontSize(i);return}let f=0;for(;f<d.length;){let n=S.options.page.maxContentHeight-S.Y,r=d.length-f,i=n-8,a=Math.floor(i/l);if(a<=0){E(e);continue}a>r&&(a=r);let o=d.slice(f,f+a),s=f===0,c=f+a>=d.length,u=a*l;if(s&&S.updateY(4,`add`),e.setFillColor(`#EEEEEE`),e.setDrawColor(`#DDDDDD`),e.roundedRect(S.X,S.Y-4,S.options.page.maxContentWidth,u+(s?4:0)+(c?4:0),2,2,`FD`),s&&t.lang){let n=e.getFontSize();e.setFontSize(10),e.setTextColor(`#666666`),e.text(t.lang,S.X+S.options.page.maxContentWidth-e.getTextWidth(t.lang)-4,S.Y,{baseline:`top`}),e.setFontSize(n),e.setTextColor(`#000000`)}let p=S.Y;for(let t of o)e.text(t,S.X+4,p,{baseline:`top`}),p+=l;S.updateY(u,`add`),S.recordContentY(S.Y+(c?4:0)),c&&S.updateY(4,`add`),f+=a,f<d.length&&E(e)}e.setFont(r.fontName,r.fontStyle),e.setFontSize(i)},B=(e,t,n)=>{let r=e.getFont().fontName,i=e.getFont().fontStyle,a=e.getFontSize(),o=e=>{switch(e){case`normal`:return 0;case`bold`:return 1;case`italic`:return 1.5;case`bolditalic`:return 1.5;case`codespan`:return .5;default:return 0}},s=(t,s)=>{s===`bold`?e.setFont(S.options.font.bold.name&&S.options.font.bold.name!==``?S.options.font.bold.name:r,S.options.font.bold.style||`bold`):s===`italic`?e.setFont(S.options.font.regular.name,`italic`):s===`bolditalic`?e.setFont(S.options.font.bold.name&&S.options.font.bold.name!==``?S.options.font.bold.name:r,`bolditalic`):s===`codespan`?(e.setFont(`courier`,`normal`),e.setFontSize(a*.9)):e.setFont(S.options.font.regular.name,i);let c=S.options.page.maxContentWidth-n-S.X,l=e.splitTextToSize(t,c),u=s===`codespan`,d=`#EEEEEE`;if(S.isInlineLockActive)for(let t=0;t<l.length;t++){if(u){let r=e.getTextWidth(l[t])+w(e),i=C(e);e.setFillColor(d),e.roundedRect(S.X+n-1,S.Y-1,r+2,i+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(l[t],S.X+n,S.Y,{baseline:`top`,maxWidth:c}),S.updateX(e.getTextDimensions(l[t]).w+(u?2:1),`add`),t<l.length-1&&(S.updateY(C(e),`add`),S.updateX(S.options.page.xpading,`set`))}else if(l.length>1){let t=l[0],r=l?.slice(1)?.join(` `);if(u){let r=e.getTextWidth(t)+w(e),i=C(e);e.setFillColor(d),e.roundedRect(S.X+(n>=2?n+2:0)-1,S.Y-1,r+2,i+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(t,S.X+(n>=2?n+2*o(s):0),S.Y,{baseline:`top`,maxWidth:c}),S.updateX(S.options.page.xpading+n),S.updateY(C(e),`add`);let i=S.options.page.maxContentWidth-n-S.options.page.xpading;e.splitTextToSize(r,i).forEach(t=>{if(u){let n=e.getTextWidth(t)+w(e),r=C(e);e.setFillColor(d),e.roundedRect(S.X+w(e)-1,S.Y-1,n+2,r+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(t,S.X+w(e),S.Y,{baseline:`top`,maxWidth:i})})}else{if(u){let r=e.getTextWidth(t)+w(e),i=C(e);e.setFillColor(d),e.roundedRect(S.X+n-1,S.Y-1,r+2,i+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(t,S.X+n,S.Y,{baseline:`top`,maxWidth:c}),S.updateX(e.getTextDimensions(t).w+(n>=2?t.split(` `).length+2:2)*o(s)*.5+(u?2:0),`add`)}};if(t.type===`text`&&t.items&&t.items.length>0)for(let e of t.items)if(e.type===`codespan`)s(e.content||``,`codespan`);else if(e.type===`em`||e.type===`strong`){let t=e.type===`em`?`italic`:`bold`;if(e.items&&e.items.length>0)for(let n of e.items)n.type===`strong`&&t===`italic`||n.type===`em`&&t===`bold`?s(n.content||``,`bolditalic`):s(n.content||``,t);else s(e.content||``,t)}else s(e.content||``,`normal`);else t.type===`em`?s(t.content||``,`italic`):t.type===`strong`?s(t.content||``,`bold`):t.type===`codespan`?s(t.content||``,`codespan`):s(t.content||``,`normal`);e.setFont(r,i),e.setFontSize(a)},V=(e,t,n)=>{let r=e.getFont().fontName,i=e.getFont().fontStyle,a=e.getFontSize(),o=e.getTextColor(),s=S.options.link?.linkColor||[0,0,255];e.setTextColor(...s);let c=S.options.page.maxContentWidth-n-S.X,l=t.text||t.content||``,u=t.href||``,d=e.splitTextToSize(l,c);if(S.isInlineLockActive)for(let t=0;t<d.length;t++){let r=e.getTextDimensions(d[t]).w,i=C(e)/2;e.link(S.X+n,S.Y,r,i,{url:u}),e.text(d[t],S.X+n,S.Y,{baseline:`top`,maxWidth:c}),S.updateX(r+1,`add`),S.X+r>S.options.page.maxContentWidth-n&&(S.updateY(i,`add`),S.updateX(S.options.page.xpading+n,`set`)),t<d.length-1&&(S.updateY(i,`add`),S.updateX(S.options.page.xpading+n,`set`))}else if(d.length>1){let t=d[0],r=d?.slice(1)?.join(` `),i=e.getTextDimensions(t).w,a=C(e)/2;e.link(S.X+n,S.Y,i,a,{url:u}),e.text(t,S.X+n,S.Y,{baseline:`top`,maxWidth:c}),S.updateX(S.options.page.xpading+n),S.updateY(a,`add`);let o=S.options.page.maxContentWidth-n-S.options.page.xpading;e.splitTextToSize(r,o).forEach(t=>{let n=e.getTextDimensions(t).w;e.link(S.X+w(e),S.Y,n,a,{url:u}),e.text(t,S.X+w(e),S.Y,{baseline:`top`,maxWidth:o})})}else{let t=e.getTextDimensions(l).w,r=C(e)/2;e.link(S.X+n,S.Y,t,r,{url:u}),e.text(l,S.X+n,S.Y,{baseline:`top`,maxWidth:c}),S.updateX(t+2,`add`)}e.setFont(r,i),e.setFontSize(a),e.setTextColor(o)},H=(e,t,n,r)=>{let i=S.options,a=n+1,o=S.X+n*i.page.indent,s=S.Y,c=o+i.page.indent/2,l=s,u=e.internal.getCurrentPageInfo().pageNumber;t.items&&t.items.length>0&&t.items.forEach(e=>{r(e,a)});let d=S.Y,f=e.internal.getCurrentPageInfo().pageNumber;e.setDrawColor(100),e.setLineWidth(1);for(let t=u;t<=f;t++){e.setPage(t);let n=t===u,r=t===f,a=n?l:i.page.topmargin,o=r?d:i.page.maxContentHeight;e.line(c,a,c,o)}S.recordContentY(),e.setPage(f)},U=e=>{if(e.data){if(e.data.startsWith(`data:image/png`))return`PNG`;if(e.data.startsWith(`data:image/jpeg`)||e.data.startsWith(`data:image/jpg`))return`JPEG`;if(e.data.startsWith(`data:image/webp`)||e.data.startsWith(`data:image/webp`))return`WEBP`;if(e.data.startsWith(`data:image/gif`))return`GIF`}if(e.src){let t=e.src.split(`?`)[0].split(`#`)[0].split(`.`).pop()?.toUpperCase();if(t&&[`PNG`,`JPEG`,`JPG`,`WEBP`,`GIF`].includes(t))return t===`JPG`?`JPEG`:t}return`JPEG`},W=(e,t,n)=>{if(!t.data)return;let r=S.options,i=r.page.unit||`mm`,a=n*r.page.indent,o=r.page.maxContentWidth-a,s=S.X+a,c=S.Y;try{let{finalWidth:n,finalHeight:a}=A(e,t,o,r.page.maxContentHeight-r.page.topmargin,i);c+a>r.page.maxContentHeight&&(E(e),c=S.Y);let l=t.align||r.image?.defaultAlign||`left`,u;switch(l){case`right`:u=s+o-n;break;case`center`:u=s+(o-n)/2;break;default:u=s;break}let d=U(t);n>0&&a>0&&e.addImage(t.data,d,u,c,n,a),S.updateY(a,`add`),S.recordContentY()}catch(e){console.warn(`Failed to render image`,e)}},G=()=>{let e=l.default;if(typeof l.default==`function`)return l.default;if(typeof e.default==`function`)return e.default;if(typeof e.autoTable==`function`)return e.autoTable;throw Error(`Could not resolve jspdf-autotable export. Expected a callable export.`)},K=(e,t,n)=>{if(!t.header||!t.rows)return;let r=S.options,i=r.page.xmargin+n*r.page.indent,a=[t.header.map(e=>e.content||``)],o=t.rows.map(e=>e.map(e=>e.content||``)),s=r.table||{};G()(e,{head:a,body:o,startY:S.Y,margin:{left:i,right:r.page.xmargin},...s,didDrawPage:e=>{s.didDrawPage&&s.didDrawPage(e)},didDrawCell:e=>{s.didDrawCell&&s.didDrawCell(e),S.setCursor({x:S.X,y:e.cell.y+e.cell.height+2*r.page.lineSpace})}})},q={page:{indent:10,maxContentWidth:190,maxContentHeight:277,lineSpace:1.5,defaultLineHeightFactor:1.2,defaultFontSize:12,defaultTitleFontSize:14,topmargin:10,xpading:10,xmargin:10,format:`a4`,orientation:`p`},font:{bold:{name:`helvetica`,style:`bold`},regular:{name:`helvetica`,style:`normal`},light:{name:`helvetica`,style:`light`}},image:{defaultAlign:`left`}},J=e=>{if(!e)throw Error(`RenderOption is required`);let t={...q.page,...e.page},n={...q.font,...e.font},r={...q.image,...e.image};return t.maxContentWidth||=190,t.maxContentHeight||=277,{...e,page:t,font:n,image:r}},Y=async(e,t,n)=>{let r=J(n);S.initialize(r);let i=await y(t);await j(i);let a=(t,n=0,i=!1,o=0,s=!1)=>{let c=n*r.page.indent;switch(t.type){case u.Heading:T(e,t,c,a);break;case u.Paragraph:P(e,t,c,a);break;case u.List:F(e,t,n,a);break;case u.ListItem:I(e,t,n,a,o,s);break;case u.Hr:R(e);break;case u.Code:z(e,t,n);break;case u.Strong:case u.Em:case u.CodeSpan:B(e,t,c);break;case u.Link:V(e,t,c);break;case u.Blockquote:H(e,t,n,a);break;case u.Image:W(e,t,n);break;case u.Table:K(e,t,n);break;case u.Raw:case u.Text:L(e,t,n,i,a,o,s,r.content?.textAlignment===`justify`);break;default:console.warn(`Warning: Unsupported element type encountered: ${t.type}.
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`marked`),l=require(`jspdf-autotable`);l=s(l);var u=function(e){return e.Heading=`heading`,e.Paragraph=`paragraph`,e.List=`list`,e.ListItem=`list_item`,e.Blockquote=`blockquote`,e.Code=`code`,e.CodeSpan=`codespan`,e.Table=`table`,e.Html=`html`,e.Hr=`hr`,e.Image=`image`,e.Link=`link`,e.Strong=`strong`,e.Em=`em`,e.TableHeader=`table_header`,e.TableCell=`table_cell`,e.Raw=`raw`,e.Text=`text`,e.Br=`br`,e}({}),d=`__jmr_`,f=/(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g,p=/(\w+)\s*=\s*(\w+)/g,m=[`left`,`center`,`right`],h=e=>{let t=[];return e.width!==void 0&&t.push(`w=${e.width}`),e.height!==void 0&&t.push(`h=${e.height}`),e.align&&t.push(`a=${e.align}`),t.length>0?`#${d}${t.join(`&`)}`:``},g=e=>{let t={},n;for(;(n=p.exec(e))!==null;){let e=n[1].toLowerCase(),r=n[2];switch(e){case`width`:case`w`:{let e=parseInt(r,10);!isNaN(e)&&e>0&&(t.width=e);break}case`height`:case`h`:{let e=parseInt(r,10);!isNaN(e)&&e>0&&(t.height=e);break}case`align`:{let e=r.toLowerCase();m.includes(e)&&(t.align=e);break}}}return t},_=e=>e.replace(f,(e,t,n,r,i)=>`${t}${n}${h(g(i))}${r}`),v=e=>{let t=e.indexOf(`#${d}`);if(t===-1)return{cleanHref:e,attrs:{}};let n=e.substring(0,t),r=e.substring(t+1+6),i={},a=r.split(`&`);for(let e of a){let[t,n]=e.split(`=`);switch(t){case`w`:{let e=parseInt(n,10);!isNaN(e)&&e>0&&(i.width=e);break}case`h`:{let e=parseInt(n,10);!isNaN(e)&&e>0&&(i.height=e);break}case`a`:m.includes(n)&&(i.align=n);break}}return{cleanHref:n,attrs:i}},y=async e=>{let t=_(e);return b(await c.marked.lexer(t,{async:!0,gfm:!0}))},b=e=>{let t=[];return e.forEach(e=>{try{let n=x[e.type];n?t.push(n(e)):t.push({type:u.Raw,content:e.raw})}catch(t){console.error(`Failed to handle token ==>`,e,t)}}),t},x={[u.Heading]:e=>({type:u.Heading,depth:e.depth,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Paragraph]:e=>({type:u.Paragraph,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.List]:e=>({type:u.List,ordered:e.ordered,start:e.start,items:e.items?b(e.items):[]}),[u.ListItem]:e=>({type:u.ListItem,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Code]:e=>({type:u.Code,lang:e.lang,code:e.text}),[u.Table]:e=>({type:u.Table,header:e.header.map(e=>({type:u.TableHeader,content:e.text})),rows:e.rows.map(e=>e.map(e=>({type:u.TableCell,content:e.text})))}),[u.Image]:e=>{let{cleanHref:t,attrs:n}=v(e.href);return{type:u.Image,src:t,alt:e.text,width:n.width,height:n.height,align:n.align}},[u.Link]:e=>({type:u.Link,href:e.href,text:e.text,items:e.tokens?b(e.tokens):[]}),[u.Strong]:e=>({type:u.Strong,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Em]:e=>({type:u.Em,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Text]:e=>({type:u.Text,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Hr]:e=>({type:u.Hr,content:e.raw,items:e.tokens?b(e.tokens):[]}),[u.CodeSpan]:e=>({type:u.CodeSpan,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Blockquote]:e=>({type:u.Blockquote,content:e.text,items:e.tokens?b(e.tokens):[]}),[u.Html]:e=>{let t=String(e.raw??e.text??``).trim();return/^<br\s*\/?>$/i.test(t)?{type:u.Br,content:`
2
+ `}:{type:u.Raw,content:e.raw??e.text??``}},[u.Br]:()=>({type:u.Br,content:`
3
+ `})},S=e=>e.getTextDimensions(`H`).h,C=e=>e.getTextDimensions(`H`).w,w=(e,t,n,r,i)=>{let a=6-(t?.depth??0)>0?6-(t?.depth??0):1;if(e.setFontSize(r.options.page.defaultFontSize+a),t?.items&&t?.items.length>0)for(let e of t?.items??[])i(e,n,r,!1);else{let i=S(e);e.text(t?.content??``,r.X+n,r.Y,{align:`left`,maxWidth:r.options.page.maxContentWidth-n,baseline:`top`}),r.recordContentY(r.Y+i),r.updateY(S(e),`add`)}e.setFontSize(r.options.page.defaultFontSize),r.updateX(r.options.page.xpading,`set`)},T=(e,t)=>{typeof t.options.pageBreakHandler==`function`?t.options.pageBreakHandler(e):e.addPage(t.options.page?.format,t.options.page?.orientation),t.updateY(t.options.page.topmargin),t.updateX(t.options.page.xpading)},E=96,D=(e,t=`mm`)=>{switch(t){case`pt`:return e*72/E;case`in`:return e/E;case`px`:return e;default:return e*25.4/E}},O=e=>{try{let t=``;if(e.includes(`base64,`)){let n=e.split(`base64,`)[1];t=typeof window<`u`&&typeof window.atob==`function`?decodeURIComponent(escape(window.atob(n))):typeof Buffer<`u`?Buffer.from(n,`base64`).toString(`utf-8`):decodeURIComponent(escape(atob(n)))}else t=decodeURIComponent(e.split(`,`)[1]||``);let n=t.match(/<svg[^>]*\swidth=(?:'|")([0-9.]+)[a-zA-Z]*(?:'|")/i),r=t.match(/<svg[^>]*\sheight=(?:'|")([0-9.]+)[a-zA-Z]*(?:'|")/i),i=t.match(/<svg[^>]*\sviewBox=(?:'|")[^'"]*(?:'|")/i),a=n?parseFloat(n[1]):0,o=r?parseFloat(r[1]):0;if((!a||!o)&&i){let e=i[0].match(/viewBox=(?:'|")([^'"]+)(?:'|")/i);if(e){let t=e[1].split(/[ ,]+/).filter(Boolean).map(parseFloat);t.length>=4&&(a||=t[2],o||=t[3])}}if(a>0&&o>0)return{width:a,height:o}}catch(e){console.warn(`Failed to extract SVG dimensions:`,e)}return null},k=(e,t,n,r,i=`mm`)=>{if(!t.data)return{finalWidth:0,finalHeight:0};let a=t.naturalWidth||0,o=t.naturalHeight||0;if(!a||!o)if(t.data.startsWith(`data:image/svg`)){let e=O(t.data);e&&(a=e.width,o=e.height)}else try{let n=e.getImageProperties(t.data);a=n.width,o=n.height}catch(e){console.warn(`Failed to get image properties for intrinsic sizing:`,e)}let s=o>0?a/o:1,c,l;if(t.width&&t.height?(c=D(t.width,i),l=D(t.height,i)):t.width?(c=D(t.width,i),l=c/s):t.height?(l=D(t.height,i),c=l*s):(c=D(a,i),l=D(o,i)),c>n){let e=n/c;c=n,l*=e}if(l>r){let e=r/l;l=r,c*=e}return{finalWidth:c,finalHeight:l}},A=async e=>{for(let t of e){if(t.type===u.Image&&t.src)try{if(t.src.startsWith(`data:`))t.data=t.src;else{let e=await fetch(t.src);if(!e.ok)throw Error(`Failed to fetch image: ${e.statusText}`);let n=await e.blob();t.data=await new Promise((e,t)=>{let r=new FileReader;r.onloadend=()=>{typeof r.result==`string`?e(r.result):t(Error(`Failed to convert image to base64 string`))},r.onerror=t,r.readAsDataURL(n)})}t.data&&t.data.startsWith(`data:image/svg`)&&typeof window<`u`&&typeof document<`u`&&(t.data=await new Promise(e=>{let n=new Image;n.onload=()=>{let r=document.createElement(`canvas`),i=O(t.data),a=i?i.width:n.width||300,o=i?i.height:n.height||150;t.naturalWidth=a,t.naturalHeight=o,r.width=a*4,r.height=o*4;let s=r.getContext(`2d`);s?(s.scale(4,4),s.drawImage(n,0,0,a,o),e(r.toDataURL(`image/png`))):e(t.data)},n.onerror=()=>e(t.data),n.src=t.data}))}catch(e){console.warn(`[jspdf-md-renderer] Warning: Failed to load image at ${t.src}. It will be skipped.`,e)}t.items&&t.items.length>0&&await A(t.items)}},j=class{static getCodespanOptions(e){let t=e.options.codespan??{};return{backgroundColor:t.backgroundColor??`#EEEEEE`,padding:t.padding??.5,showBackground:t.showBackground!==!1,fontSizeScale:t.fontSizeScale??.9}}static applyStyle(e,t,n){let r=e.getFont().fontName,i=e.getFontSize(),a=()=>{let e=n.options.font.bold?.name;return e&&e!==``?e:r},o=()=>{let e=n.options.font.regular?.name;return e&&e!==``?e:r};switch(t){case`bold`:e.setFont(a(),n.options.font.bold?.style||`bold`);break;case`italic`:e.setFont(o(),`italic`);break;case`bolditalic`:e.setFont(a(),`bolditalic`);break;case`codespan`:e.setFont(`courier`,`normal`),e.setFontSize(i*this.getCodespanOptions(n).fontSizeScale);break;default:e.setFont(o(),e.getFont().fontStyle);break}}static measureWordWidth(e,t,n,r){let i=e.getFont(),a=e.getFontSize();this.applyStyle(e,n,r);let o=e.getTextWidth(t),s=e.getCharSpace?.()??0,c=o+t.length*s;return e.setFont(i.fontName,i.fontStyle),e.setFontSize(a),c}static getStyleFromType(e,t){switch(e){case`strong`:return t===`italic`?`bolditalic`:`bold`;case`em`:return t===`bold`?`bolditalic`:`italic`;case`codespan`:return`codespan`;default:return t||`normal`}}static flattenToWords(e,t,n,r=`normal`,i=!1,a){let o=[];for(let s of t){let t=this.getStyleFromType(s.type,r),c=s.type===`link`||i,l=s.href||a;if(s.items&&s.items.length>0){let r=this.flattenToWords(e,s.items,n,t,c,l);o.push(...r)}else if(s.type===`image`){let r=n.options.page.maxContentHeight-n.options.page.topmargin,{finalWidth:i,finalHeight:a}=k(e,s,n.options.page.maxContentWidth-n.options.page.indent*0,r,n.options.page.unit||`mm`);o.push({text:``,width:i,style:t,isLink:c,href:l,linkColor:c?n.options.link?.linkColor||[0,0,255]:void 0,isImage:!0,imageElement:s,imageHeight:a})}else if(s.type===`br`)o.push({text:``,width:0,style:t,isBr:!0});else{let r=s.content||s.text||``;if(!r)continue;if(/^\s/.test(r)&&o.length>0&&(o[o.length-1].hasTrailingSpace=!0),t===`codespan`){let i=r.trim();i&&o.push({text:i,width:this.measureWordWidth(e,i,t,n),style:t,isLink:c,href:l,linkColor:c?n.options.link?.linkColor||[0,0,255]:void 0,hasTrailingSpace:/\s$/.test(r)});continue}let i=r.trim().split(/\s+/).filter(e=>e.length>0);for(let a=0;a<i.length;a++){let s=a!==i.length-1||/\s$/.test(r);o.push({text:i[a],width:this.measureWordWidth(e,i[a],t,n),style:t,isLink:c,href:l,linkColor:c?n.options.link?.linkColor||[0,0,255]:void 0,hasTrailingSpace:s})}}}return o}static breakIntoLines(e,t,n,r){let i=[],a=[],o=0,s=0,c=S(e)*r.options.page.defaultLineHeightFactor,l=e.getTextWidth(` `);for(let u=0;u<t.length;u++){let d=t[u],f=a[a.length-1]?.hasTrailingSpace?l+d.width:d.width,p=d.isImage&&d.imageHeight?d.imageHeight:S(e)*r.options.page.defaultLineHeightFactor;if(d.isBr){i.push({words:a,totalTextWidth:o,isLastLine:!0,lineHeight:c}),a=[],o=0,s=0,c=S(e)*r.options.page.defaultLineHeightFactor;continue}s+f>n&&a.length>0?(i.push({words:a,totalTextWidth:o,isLastLine:!1,lineHeight:c}),a=[d],o=d.width,s=d.width,c=p):(a.push(d),o+=d.width,s+=f,c=Math.max(c,p))}return a.length>0&&i.push({words:a,totalTextWidth:o,isLastLine:!0,lineHeight:c}),i}static renderWord(e,t,n,r,i){let a=e.getFont(),o=e.getFontSize(),s=e.getTextColor();if(this.applyStyle(e,t.style,i),t.isLink&&t.linkColor&&e.setTextColor(...t.linkColor),t.isImage&&t.imageElement&&t.imageElement.data)try{let i=`JPEG`;if(t.imageElement.data.startsWith(`data:image/png`))i=`PNG`;else if(t.imageElement.data.startsWith(`data:image/webp`))i=`WEBP`;else if(t.imageElement.data.startsWith(`data:image/gif`))i=`GIF`;else if(t.imageElement.src){let e=t.imageElement.src.split(`?`)[0].split(`#`)[0].split(`.`).pop()?.toUpperCase();e&&[`PNG`,`JPEG`,`JPG`,`WEBP`,`GIF`].includes(e)&&(i=e===`JPG`?`JPEG`:e)}if(t.width>0&&(t.imageHeight||0)>0){let a=t.imageHeight||0,o=r;e.addImage(t.imageElement.data,i,n,o,t.width,a)}}catch(e){console.warn(`Failed to render inline image`,e)}else{if(t.style===`codespan`){let a=this.getCodespanOptions(i);if(a.showBackground){let i=S(e),o=a.padding;e.setFillColor(a.backgroundColor),e.rect(n-o,r-o,t.width+o*2,i+o*2,`F`),e.setFillColor(`#000000`)}}e.text(t.text,n,r,{baseline:`top`})}if(t.isLink&&t.href){let i=t.isImage&&t.imageHeight?t.imageHeight:S(e);e.link(n,r,t.width,i,{url:t.href})}e.setFont(a.fontName,a.fontStyle),e.setFontSize(o),e.setTextColor(s)}static renderAlignedLine(e,t,n,r,i,a,o=`left`){let{words:s,totalTextWidth:c,isLastLine:l}=t;if(s.length===0)return;let u=e.getTextWidth(` `),d=n,f=u,p=c,m=0;for(let e=0;e<s.length-1;e++)s[e].hasTrailingSpace&&(p+=u,m++);switch(o){case`right`:d=n+i-p;break;case`center`:d=n+(i-p)/2;break;case`justify`:!l&&m>0&&(f=(i-c)/m);break;default:break}let h=d,g=S(e)*a.options.page.defaultLineHeightFactor;for(let n=0;n<s.length;n++){let i=s[n],o=r,c=i.isImage&&i.imageHeight?i.imageHeight:g;i.isImage?o=r:c<t.lineHeight&&(o=r+(t.lineHeight-c)),this.renderWord(e,i,h,o,a),h+=i.width,n<s.length-1&&i.hasTrailingSpace&&(h+=f)}}static renderStyledParagraph(e,t,n,r,i,a,o){let s=o??a.options.content?.textAlignment??`left`,c=this.flattenToWords(e,t,a);if(c.length===0)return;let l=this.breakIntoLines(e,c,i,a),u=r;for(let t of l)u+t.lineHeight>a.options.page.maxContentHeight&&(T(e,a),u=a.Y),this.renderAlignedLine(e,t,n,u,i,a,s),a.recordContentY(u+t.lineHeight),u+=t.lineHeight,a.updateY(t.lineHeight,`add`);let d=l[l.length-1];if(d){let t=0;for(let e=0;e<d.words.length-1;e++)d.words[e].hasTrailingSpace&&t++;let r=d.totalTextWidth+t*e.getTextWidth(` `);a.updateX(n+r,`set`)}}static renderJustifiedParagraph(e,t,n,r,i,a){this.renderStyledParagraph(e,t,n,r,i,a)}},M=class{static renderText(e,t,n,r=n.X,i=n.Y,a,o=!1){let s=e.splitTextToSize(t,a),c=S(e),l=c*n.options.page.defaultLineHeightFactor,u=i;for(let t=0;t<s.length;t++){let i=s[t];u+l>n.options.page.maxContentHeight&&(T(e,n),u=n.Y),o?t===s.length-1?e.text(i,r,u,{baseline:`top`}):e.text(i,r,u,{maxWidth:a,align:`justify`,baseline:`top`}):e.text(i,r,u,{baseline:`top`}),n.recordContentY(u+c),u+=l,n.updateY(l,`add`)}return u}},N=(e,t,n,r,i)=>{r.activateInlineLock(),e.setFontSize(r.options.page.defaultFontSize);let a=r.options.page.maxContentWidth-n;if(t?.items&&t?.items.length>0){if(t.items.length===1&&t.items[0].type===`image`){i(t.items[0],n,r,!1),r.updateX(r.options.page.xpading),r.deactivateInlineLock();return}let o=[u.Strong,u.Em,u.Text,u.CodeSpan,u.Link,u.Image,u.Br];if(t.items.some(e=>!o.includes(e.type))){let s=[],c=()=>{s.length>0&&(j.renderStyledParagraph(e,s,r.X+n,r.Y,a,r),s.length=0)};for(let e of t.items)o.includes(e.type)?s.push(e):(c(),i(e,n,r,!1));c()}else j.renderStyledParagraph(e,t.items,r.X+n,r.Y,a,r)}else{let i=t.content??``,o=r.options.content?.textAlignment??`left`;i.trim()&&M.renderText(e,i,r,r.X+n,r.Y,a,o===`justify`)}r.updateX(r.options.page.xpading),r.deactivateInlineLock()},P=(e,t,n,r,i)=>{e.setFontSize(r.options.page.defaultFontSize);for(let[e,a]of t?.items?.entries()??[]){let o=t.ordered?(t.start??0)+e:t.start;i(a,n+1,r,!0,o,t.ordered)}},F=(e,t,n,r,i,a,o)=>{r.Y+S(e)>=r.options.page.maxContentHeight&&T(e,r);let s=r.options,c=n*s.page.indent,l=o?`${a}. `:`• `,d=s.page.xpading;r.updateX(d,`set`),e.setFont(s.font.regular.name,s.font.regular.style),e.text(l,d+c,r.Y,{baseline:`top`});let f=e.getTextWidth(l),p=d+c+f,m=s.page.maxContentWidth-c-f;if(t.items&&t.items.length>0){let s=[],c=()=>{s.length>0&&(j.renderStyledParagraph(e,s,p,r.Y,m,r),s.length=0,r.updateX(d,`set`))};for(let e of t.items)e.type===u.List?(c(),i(e,n,r,!0,a,e.ordered??!1)):e.type===u.ListItem?(c(),i(e,n,r,!0,a,o)):s.push(e);c()}else if(t.content){let n=s.content?.textAlignment??`left`;M.renderText(e,t.content,r,p,r.Y,m,n===`justify`)}},I=(e,t,n,r,i,a,o,s,c=!0)=>{if(t?.items&&t?.items.length>0)for(let e of t?.items??[])a(e,n,r,i,o,s,c);else{let a=r.options,l=n*a.page.indent,u=i?s?`${o}. `:`• `:``,d=t.content||``,f=a.page.xpading;if(!d&&!u)return;if(!d.trim()&&!u){let t=(d.match(/\n/g)||[]).length;if(t>1){let n=(t-1)*(e.getTextDimensions(`A`).h*a.page.defaultLineHeightFactor);r.Y+n>a.page.maxContentHeight?T(e,r):(r.updateY(n,`add`),r.recordContentY(r.Y))}return}if(r.updateX(f,`set`),i&&u){let t=e.getTextWidth(u),n=a.page.maxContentWidth-l-t;e.setFont(a.font.regular.name,a.font.regular.style),e.text(u,f+l,r.Y,{baseline:`top`}),M.renderText(e,d,r,f+l+t,r.Y,n,c)}else{let t=a.page.maxContentWidth-l;M.renderText(e,d,r,f+l,r.Y,t,c)}r.updateX(f,`set`)}},L=(e,t)=>{let n=e.internal.pageSize.getWidth();e.setLineDashPattern([1,1],0),e.setLineWidth(.1),e.line(t.options.page.xpading,t.Y,n-t.options.page.xpading,t.Y),e.setLineWidth(.1),e.setLineDashPattern([],0),t.updateY(S(e),`add`)},R=(e,t,n,r)=>{let i=e.getFont(),a=e.getFontSize();e.setFont(`courier`,`normal`);let o=r.options.page.defaultFontSize*.9;e.setFontSize(o);let s=n*r.options.page.indent,c=r.options.page.maxContentWidth-s-8,l=e.getLineHeightFactor(),u=o/e.internal.scaleFactor*l,d=(t.code??``).replace(/[\r\n\s]+$/,``);if(!d){e.setFont(i.fontName,i.fontStyle),e.setFontSize(a);return}let f=e.splitTextToSize(d,c);for(;f.length>0&&f[f.length-1].trim()===``;)f.pop();if(f.length===0){e.setFont(i.fontName,i.fontStyle),e.setFontSize(a);return}let p=0;for(;p<f.length;){let n=r.options.page.maxContentHeight-r.Y,i=f.length-p,a=n-8,o=Math.floor(a/u);if(o<=0){T(e,r);continue}o>i&&(o=i);let s=f.slice(p,p+o),c=p===0,l=p+o>=f.length,d=o*u;if(c&&r.updateY(4,`add`),e.setFillColor(`#EEEEEE`),e.setDrawColor(`#DDDDDD`),e.roundedRect(r.X,r.Y-4,r.options.page.maxContentWidth,d+(c?4:0)+(l?4:0),2,2,`FD`),c&&t.lang){let n=e.getFontSize();e.setFontSize(10),e.setTextColor(`#666666`),e.text(t.lang,r.X+r.options.page.maxContentWidth-e.getTextWidth(t.lang)-4,r.Y,{baseline:`top`}),e.setFontSize(n),e.setTextColor(`#000000`)}let m=r.Y;for(let t of s)e.text(t,r.X+4,m,{baseline:`top`}),m+=u;r.updateY(d,`add`),r.recordContentY(r.Y+(l?4:0)),l&&r.updateY(4,`add`),p+=o,p<f.length&&T(e,r)}e.setFont(i.fontName,i.fontStyle),e.setFontSize(a)},z=(e,t,n,r)=>{let i=e.getFont().fontName,a=e.getFont().fontStyle,o=e.getFontSize(),s=e=>{switch(e){case`normal`:return 0;case`bold`:return 1;case`italic`:return 1.5;case`bolditalic`:return 1.5;case`codespan`:return .5;default:return 0}},c=(t,c)=>{c===`bold`?e.setFont(r.options.font.bold.name&&r.options.font.bold.name!==``?r.options.font.bold.name:i,r.options.font.bold.style||`bold`):c===`italic`?e.setFont(r.options.font.regular.name,`italic`):c===`bolditalic`?e.setFont(r.options.font.bold.name&&r.options.font.bold.name!==``?r.options.font.bold.name:i,`bolditalic`):c===`codespan`?(e.setFont(`courier`,`normal`),e.setFontSize(o*.9)):e.setFont(r.options.font.regular.name,a);let l=r.options.page.maxContentWidth-n-r.X,u=e.splitTextToSize(t,l),d=c===`codespan`,f=`#EEEEEE`;if(r.isInlineLockActive)for(let t=0;t<u.length;t++){if(d){let i=e.getTextWidth(u[t])+C(e),a=S(e);e.setFillColor(f),e.roundedRect(r.X+n-1,r.Y-1,i+2,a+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(u[t],r.X+n,r.Y,{baseline:`top`,maxWidth:l}),r.updateX(e.getTextDimensions(u[t]).w+(d?2:1),`add`),t<u.length-1&&(r.updateY(S(e),`add`),r.updateX(r.options.page.xpading,`set`))}else if(u.length>1){let t=u[0],i=u?.slice(1)?.join(` `);if(d){let i=e.getTextWidth(t)+C(e),a=S(e);e.setFillColor(f),e.roundedRect(r.X+(n>=2?n+2:0)-1,r.Y-1,i+2,a+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(t,r.X+(n>=2?n+2*s(c):0),r.Y,{baseline:`top`,maxWidth:l}),r.updateX(r.options.page.xpading+n),r.updateY(S(e),`add`);let a=r.options.page.maxContentWidth-n-r.options.page.xpading;e.splitTextToSize(i,a).forEach(t=>{if(d){let n=e.getTextWidth(t)+C(e),i=S(e);e.setFillColor(f),e.roundedRect(r.X+C(e)-1,r.Y-1,n+2,i+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(t,r.X+C(e),r.Y,{baseline:`top`,maxWidth:a})})}else{if(d){let i=e.getTextWidth(t)+C(e),a=S(e);e.setFillColor(f),e.roundedRect(r.X+n-1,r.Y-1,i+2,a+2,2,2,`F`),e.setFillColor(`#000000`)}e.text(t,r.X+n,r.Y,{baseline:`top`,maxWidth:l}),r.updateX(e.getTextDimensions(t).w+(n>=2?t.split(` `).length+2:2)*s(c)*.5+(d?2:0),`add`)}};if(t.type===`text`&&t.items&&t.items.length>0)for(let e of t.items)if(e.type===`codespan`)c(e.content||``,`codespan`);else if(e.type===`em`||e.type===`strong`){let t=e.type===`em`?`italic`:`bold`;if(e.items&&e.items.length>0)for(let n of e.items)n.type===`strong`&&t===`italic`||n.type===`em`&&t===`bold`?c(n.content||``,`bolditalic`):c(n.content||``,t);else c(e.content||``,t)}else c(e.content||``,`normal`);else t.type===`em`?c(t.content||``,`italic`):t.type===`strong`?c(t.content||``,`bold`):t.type===`codespan`?c(t.content||``,`codespan`):c(t.content||``,`normal`);e.setFont(i,a),e.setFontSize(o)},B=(e,t,n,r)=>{let i=e.getFont().fontName,a=e.getFont().fontStyle,o=e.getFontSize(),s=e.getTextColor(),c=r.options.link?.linkColor||[0,0,255];e.setTextColor(...c);let l=r.options.page.maxContentWidth-n-r.X,u=t.text||t.content||``,d=t.href||``,f=e.splitTextToSize(u,l);if(r.isInlineLockActive)for(let t=0;t<f.length;t++){let i=e.getTextDimensions(f[t]).w,a=S(e)/2;e.link(r.X+n,r.Y,i,a,{url:d}),e.text(f[t],r.X+n,r.Y,{baseline:`top`,maxWidth:l}),r.updateX(i+1,`add`),r.X+i>r.options.page.maxContentWidth-n&&(r.updateY(a,`add`),r.updateX(r.options.page.xpading+n,`set`)),t<f.length-1&&(r.updateY(a,`add`),r.updateX(r.options.page.xpading+n,`set`))}else if(f.length>1){let t=f[0],i=f?.slice(1)?.join(` `),a=e.getTextDimensions(t).w,o=S(e)/2;e.link(r.X+n,r.Y,a,o,{url:d}),e.text(t,r.X+n,r.Y,{baseline:`top`,maxWidth:l}),r.updateX(r.options.page.xpading+n),r.updateY(o,`add`);let s=r.options.page.maxContentWidth-n-r.options.page.xpading;e.splitTextToSize(i,s).forEach(t=>{let n=e.getTextDimensions(t).w;e.link(r.X+C(e),r.Y,n,o,{url:d}),e.text(t,r.X+C(e),r.Y,{baseline:`top`,maxWidth:s})})}else{let t=e.getTextDimensions(u).w,i=S(e)/2;e.link(r.X+n,r.Y,t,i,{url:d}),e.text(u,r.X+n,r.Y,{baseline:`top`,maxWidth:l}),r.updateX(t+2,`add`)}e.setFont(i,a),e.setFontSize(o),e.setTextColor(s)},V=(e,t,n,r,i)=>{let a=r.options,o=n+1,s=r.X+n*a.page.indent,c=r.Y,l=s+a.page.indent/2,u=c,d=e.internal.getCurrentPageInfo().pageNumber;t.items&&t.items.length>0&&t.items.forEach(e=>{i(e,o,r)});let f=r.Y,p=e.internal.getCurrentPageInfo().pageNumber;e.setDrawColor(100),e.setLineWidth(1);for(let t=d;t<=p;t++){e.setPage(t);let n=t===d,r=t===p,i=n?u:a.page.topmargin,o=r?f:a.page.maxContentHeight;e.line(l,i,l,o)}r.recordContentY(),e.setPage(p)},H=e=>{if(e.data){if(e.data.startsWith(`data:image/png`))return`PNG`;if(e.data.startsWith(`data:image/jpeg`)||e.data.startsWith(`data:image/jpg`))return`JPEG`;if(e.data.startsWith(`data:image/webp`)||e.data.startsWith(`data:image/webp`))return`WEBP`;if(e.data.startsWith(`data:image/gif`))return`GIF`}if(e.src){let t=e.src.split(`?`)[0].split(`#`)[0].split(`.`).pop()?.toUpperCase();if(t&&[`PNG`,`JPEG`,`JPG`,`WEBP`,`GIF`].includes(t))return t===`JPG`?`JPEG`:t}return`JPEG`},U=(e,t,n,r)=>{if(!t.data)return;let i=r.options,a=i.page.unit||`mm`,o=n*i.page.indent,s=i.page.maxContentWidth-o,c=r.X+o,l=r.Y;try{let{finalWidth:n,finalHeight:o}=k(e,t,s,i.page.maxContentHeight-i.page.topmargin,a);l+o>i.page.maxContentHeight&&(T(e,r),l=r.Y);let u=t.align||i.image?.defaultAlign||`left`,d;switch(u){case`right`:d=c+s-n;break;case`center`:d=c+(s-n)/2;break;default:d=c;break}let f=H(t);n>0&&o>0&&e.addImage(t.data,f,d,l,n,o),r.updateY(o,`add`),r.recordContentY()}catch(e){console.warn(`Failed to render image`,e)}},W=()=>{let e=l.default;if(typeof l.default==`function`)return l.default;if(typeof e.default==`function`)return e.default;if(typeof e.autoTable==`function`)return e.autoTable;throw Error(`Could not resolve jspdf-autotable export. Expected a callable export.`)},G=(e,t,n,r)=>{if(!t.header||!t.rows)return;let i=r.options,a=i.page.xmargin+n*i.page.indent,o=[t.header.map(e=>e.content||``)],s=t.rows.map(e=>e.map(e=>e.content||``)),c=i.table||{};W()(e,{head:o,body:s,startY:r.Y,margin:{left:a,right:i.page.xmargin},...c,didDrawPage:e=>{c.didDrawPage&&c.didDrawPage(e)},didDrawCell:e=>{c.didDrawCell&&c.didDrawCell(e)}});let l=e.lastAutoTable?.finalY;typeof l==`number`&&(r.updateY(l+i.page.lineSpace,`set`),r.updateX(i.page.xpading,`set`),r.recordContentY())},K=class{constructor(e){this.cursor={x:0,y:0},this.lastContentY_=0,this.inlineLock=!1,this.options_=e,this.cursor={x:e.cursor.x,y:e.cursor.y},this.lastContentY_=e.cursor.y}getCursor(){return this.cursor}setCursor(e){this.cursor=e}get options(){return this.options_}get isInlineLockActive(){return this.inlineLock}activateInlineLock(){this.inlineLock=!0}deactivateInlineLock(){this.inlineLock=!1}updateX(e,t=`set`){t===`set`?this.cursor.x=e:t===`add`&&(this.cursor.x+=e)}updateY(e,t=`set`){t===`set`?this.cursor.y=e:t===`add`&&(this.cursor.y+=e)}recordContentY(e){this.lastContentY_=e===void 0?this.cursor.y:e}get lastContentY(){return this.lastContentY_}get X(){return this.cursor.x}get Y(){return this.cursor.y}},q={page:{indent:10,maxContentWidth:190,maxContentHeight:277,lineSpace:1.5,defaultLineHeightFactor:1.2,defaultFontSize:12,defaultTitleFontSize:14,topmargin:10,xpading:10,xmargin:10,format:`a4`,orientation:`p`},font:{bold:{name:`helvetica`,style:`bold`},regular:{name:`helvetica`,style:`normal`},light:{name:`helvetica`,style:`light`}},image:{defaultAlign:`left`}},J=e=>{if(!e)throw Error(`RenderOption is required`);let t={...q.page,...e.page},n={...q.font,...e.font},r={...q.image,...e.image};return t.maxContentWidth||=190,t.maxContentHeight||=277,{...e,page:t,font:n,image:r}},Y=async(e,t,n)=>{let r=J(n),i=new K(r),a=await y(t);await A(a);let o=(t,n=0,i,a=!1,s=0,c=!1)=>{let l=n*r.page.indent;switch(t.type){case u.Heading:w(e,t,l,i,o);break;case u.Paragraph:N(e,t,l,i,o);break;case u.List:P(e,t,n,i,o);break;case u.ListItem:F(e,t,n,i,o,s,c);break;case u.Hr:L(e,i);break;case u.Code:R(e,t,n,i);break;case u.Strong:case u.Em:case u.CodeSpan:z(e,t,l,i);break;case u.Link:B(e,t,l,i);break;case u.Blockquote:V(e,t,n,i,o);break;case u.Image:U(e,t,n,i);break;case u.Br:{i.updateX(r.page.xpading,`set`);let t=S(e)*r.page.defaultLineHeightFactor;i.Y+t>r.page.maxContentHeight?T(e,i):i.updateY(t,`add`),i.recordContentY();break}case u.Table:G(e,t,n,i);break;case u.Raw:case u.Text:I(e,t,n,i,a,o,s,c,r.content?.textAlignment===`justify`);break;default:console.warn(`Warning: Unsupported element type encountered: ${t.type}.
2
4
  If you believe this element type should be supported, please create an issue at:
3
5
  https://github.com/JeelGajera/jspdf-md-renderer/issues
4
- with details of the element and expected behavior. Thanks for helping to improve this library!`);break}};for(let e of i)a(e);r.endCursorYHandler(S.Y)};exports.MdTextParser=y,exports.MdTextRender=Y;
6
+ with details of the element and expected behavior. Thanks for helping to improve this library!`);break}};for(let e of a)o(e,0,i);r.endCursorYHandler(i.Y)};exports.MdTextParser=y,exports.MdTextRender=Y;