jspdf-md-renderer 3.3.0 → 3.3.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.
package/dist/index.mjs CHANGED
@@ -1,30 +1,30 @@
1
1
  import { marked as j } from "marked";
2
- import O from "jspdf-autotable";
2
+ import z from "jspdf-autotable";
3
3
  var u = /* @__PURE__ */ ((t) => (t.Heading = "heading", t.Paragraph = "paragraph", t.List = "list", t.ListItem = "list_item", t.Blockquote = "blockquote", t.Code = "code", t.CodeSpan = "codespan", t.Table = "table", t.Html = "html", t.Hr = "hr", t.Image = "image", t.Link = "link", t.Strong = "strong", t.Em = "em", t.TableHeader = "table_header", t.TableCell = "table_cell", t.Raw = "raw", t.Text = "text", t))(u || {});
4
- const D = "__jmr_", q = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, U = /(\w+)\s*=\s*(\w+)/g, R = ["left", "center", "right"], Q = (t) => {
4
+ const A = "__jmr_", O = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, q = /(\w+)\s*=\s*(\w+)/g, G = ["left", "center", "right"], U = (t) => {
5
5
  const e = [];
6
- return t.width !== void 0 && e.push(`w=${t.width}`), t.height !== void 0 && e.push(`h=${t.height}`), t.align && e.push(`a=${t.align}`), e.length > 0 ? `#${D}${e.join("&")}` : "";
7
- }, V = (t) => {
6
+ return t.width !== void 0 && e.push(`w=${t.width}`), t.height !== void 0 && e.push(`h=${t.height}`), t.align && e.push(`a=${t.align}`), e.length > 0 ? `#${A}${e.join("&")}` : "";
7
+ }, Q = (t) => {
8
8
  const e = {};
9
9
  let i;
10
- for (; (i = U.exec(t)) !== null; ) {
11
- const r = i[1].toLowerCase(), h = i[2];
10
+ for (; (i = q.exec(t)) !== null; ) {
11
+ const r = i[1].toLowerCase(), c = i[2];
12
12
  switch (r) {
13
13
  case "width":
14
14
  case "w": {
15
- const o = parseInt(h, 10);
15
+ const o = parseInt(c, 10);
16
16
  !isNaN(o) && o > 0 && (e.width = o);
17
17
  break;
18
18
  }
19
19
  case "height":
20
20
  case "h": {
21
- const o = parseInt(h, 10);
21
+ const o = parseInt(c, 10);
22
22
  !isNaN(o) && o > 0 && (e.height = o);
23
23
  break;
24
24
  }
25
25
  case "align": {
26
- const o = h.toLowerCase();
27
- R.includes(
26
+ const o = c.toLowerCase();
27
+ G.includes(
28
28
  o
29
29
  ) && (e.align = o);
30
30
  break;
@@ -32,50 +32,50 @@ const D = "__jmr_", q = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, U = /(\w+)\
32
32
  }
33
33
  }
34
34
  return e;
35
- }, Z = (t) => t.replace(
36
- q,
37
- (e, i, r, h, o) => {
38
- const l = V(o), a = Q(l);
39
- return `${i}${r}${a}${h}`;
35
+ }, V = (t) => t.replace(
36
+ O,
37
+ (e, i, r, c, o) => {
38
+ const g = Q(o), a = U(g);
39
+ return `${i}${r}${a}${c}`;
40
40
  }
41
- ), K = (t) => {
42
- const e = t.indexOf(`#${D}`);
41
+ ), Z = (t) => {
42
+ const e = t.indexOf(`#${A}`);
43
43
  if (e === -1)
44
44
  return { cleanHref: t, attrs: {} };
45
- const i = t.substring(0, e), r = t.substring(e + 1 + D.length), h = {}, o = r.split("&");
46
- for (const l of o) {
47
- const [a, s] = l.split("=");
45
+ const i = t.substring(0, e), r = t.substring(e + 1 + A.length), c = {}, o = r.split("&");
46
+ for (const g of o) {
47
+ const [a, s] = g.split("=");
48
48
  switch (a) {
49
49
  case "w": {
50
- const g = parseInt(s, 10);
51
- !isNaN(g) && g > 0 && (h.width = g);
50
+ const l = parseInt(s, 10);
51
+ !isNaN(l) && l > 0 && (c.width = l);
52
52
  break;
53
53
  }
54
54
  case "h": {
55
- const g = parseInt(s, 10);
56
- !isNaN(g) && g > 0 && (h.height = g);
55
+ const l = parseInt(s, 10);
56
+ !isNaN(l) && l > 0 && (c.height = l);
57
57
  break;
58
58
  }
59
59
  case "a": {
60
- R.includes(
60
+ G.includes(
61
61
  s
62
- ) && (h.align = s);
62
+ ) && (c.align = s);
63
63
  break;
64
64
  }
65
65
  }
66
66
  }
67
- return { cleanHref: i, attrs: h };
68
- }, M = async (t) => {
69
- const e = Z(t), i = await j.lexer(e, {
67
+ return { cleanHref: i, attrs: c };
68
+ }, K = async (t) => {
69
+ const e = V(t), i = await j.lexer(e, {
70
70
  async: !0,
71
71
  gfm: !0
72
72
  });
73
- return W(i);
74
- }, W = (t) => {
73
+ return w(i);
74
+ }, w = (t) => {
75
75
  const e = [];
76
76
  return t.forEach((i) => {
77
77
  try {
78
- const r = tt[i.type];
78
+ const r = M[i.type];
79
79
  r ? e.push(r(i)) : e.push({
80
80
  type: u.Raw,
81
81
  content: i.raw
@@ -84,28 +84,28 @@ const D = "__jmr_", q = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, U = /(\w+)\
84
84
  console.error("Failed to handle token ==>", i, r);
85
85
  }
86
86
  }), e;
87
- }, tt = {
87
+ }, M = {
88
88
  [u.Heading]: (t) => ({
89
89
  type: u.Heading,
90
90
  depth: t.depth,
91
91
  content: t.text,
92
- items: t.tokens ? W(t.tokens) : []
92
+ items: t.tokens ? w(t.tokens) : []
93
93
  }),
94
94
  [u.Paragraph]: (t) => ({
95
95
  type: u.Paragraph,
96
96
  content: t.text,
97
- items: t.tokens ? W(t.tokens) : []
97
+ items: t.tokens ? w(t.tokens) : []
98
98
  }),
99
99
  [u.List]: (t) => ({
100
100
  type: u.List,
101
101
  ordered: t.ordered,
102
102
  start: t.start,
103
- items: t.items ? W(t.items) : []
103
+ items: t.items ? w(t.items) : []
104
104
  }),
105
105
  [u.ListItem]: (t) => ({
106
106
  type: u.ListItem,
107
107
  content: t.text,
108
- items: t.tokens ? W(t.tokens) : []
108
+ items: t.tokens ? w(t.tokens) : []
109
109
  }),
110
110
  [u.Code]: (t) => ({
111
111
  type: u.Code,
@@ -126,7 +126,7 @@ const D = "__jmr_", q = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, U = /(\w+)\
126
126
  )
127
127
  }),
128
128
  [u.Image]: (t) => {
129
- const { cleanHref: e, attrs: i } = K(t.href);
129
+ const { cleanHref: e, attrs: i } = Z(t.href);
130
130
  return {
131
131
  type: u.Image,
132
132
  src: e,
@@ -140,37 +140,37 @@ const D = "__jmr_", q = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, U = /(\w+)\
140
140
  type: u.Link,
141
141
  href: t.href,
142
142
  text: t.text,
143
- items: t.tokens ? W(t.tokens) : []
143
+ items: t.tokens ? w(t.tokens) : []
144
144
  }),
145
145
  [u.Strong]: (t) => ({
146
146
  type: u.Strong,
147
147
  content: t.text,
148
- items: t.tokens ? W(t.tokens) : []
148
+ items: t.tokens ? w(t.tokens) : []
149
149
  }),
150
150
  [u.Em]: (t) => ({
151
151
  type: u.Em,
152
152
  content: t.text,
153
- items: t.tokens ? W(t.tokens) : []
153
+ items: t.tokens ? w(t.tokens) : []
154
154
  }),
155
155
  [u.Text]: (t) => ({
156
156
  type: u.Text,
157
157
  content: t.text,
158
- items: t.tokens ? W(t.tokens) : []
158
+ items: t.tokens ? w(t.tokens) : []
159
159
  }),
160
160
  [u.Hr]: (t) => ({
161
161
  type: u.Hr,
162
162
  content: t.raw,
163
- items: t.tokens ? W(t.tokens) : []
163
+ items: t.tokens ? w(t.tokens) : []
164
164
  }),
165
165
  [u.CodeSpan]: (t) => ({
166
166
  type: u.CodeSpan,
167
167
  content: t.text,
168
- items: t.tokens ? W(t.tokens) : []
168
+ items: t.tokens ? w(t.tokens) : []
169
169
  }),
170
170
  [u.Blockquote]: (t) => ({
171
171
  type: u.Blockquote,
172
172
  content: t.text,
173
- items: t.tokens ? W(t.tokens) : []
173
+ items: t.tokens ? w(t.tokens) : []
174
174
  })
175
175
  }, I = class I {
176
176
  static initialize(e) {
@@ -237,13 +237,13 @@ const D = "__jmr_", q = /(!\[[^\]]*\]\()([^)]+)(\))\s*\{([^}]+)\}/g, U = /(\w+)\
237
237
  };
238
238
  I.cursor = { x: 0, y: 0 }, I.lastContentY_ = 0, I.inlineLock = !1;
239
239
  let n = I;
240
- const C = (t) => t.getTextDimensions("H").h * n.options.page.defaultLineHeightFactor, y = (t) => t.getTextDimensions("H").w * n.options.page.defaultLineHeightFactor, et = (t, e, i, r) => {
241
- const h = 6 - (e?.depth ?? 0) > 0 ? 6 - (e?.depth ?? 0) : 1;
242
- if (t.setFontSize(n.options.page.defaultFontSize + h), e?.items && e?.items.length > 0)
240
+ const F = (t) => t.getTextDimensions("H").h * n.options.page.defaultLineHeightFactor, H = (t) => t.getTextDimensions("H").w * n.options.page.defaultLineHeightFactor, tt = (t, e, i, r) => {
241
+ const c = 6 - (e?.depth ?? 0) > 0 ? 6 - (e?.depth ?? 0) : 1;
242
+ if (t.setFontSize(n.options.page.defaultFontSize + c), e?.items && e?.items.length > 0)
243
243
  for (const o of e?.items ?? [])
244
244
  r(o, i, !1);
245
245
  else {
246
- const o = C(t);
246
+ const o = F(t);
247
247
  t.text(
248
248
  e?.content ?? "",
249
249
  n.X + i,
@@ -261,18 +261,18 @@ const C = (t) => t.getTextDimensions("H").h * n.options.page.defaultLineHeightFa
261
261
  n.options.page?.format,
262
262
  n.options.page?.orientation
263
263
  ), n.updateY(n.options.page.topmargin), n.updateX(n.options.page.xpading);
264
- }, z = 96, k = (t, e = "mm") => {
264
+ }, v = 96, k = (t, e = "mm") => {
265
265
  switch (e) {
266
266
  case "pt":
267
- return t * 72 / z;
267
+ return t * 72 / v;
268
268
  case "in":
269
- return t / z;
269
+ return t / v;
270
270
  case "px":
271
271
  return t;
272
272
  default:
273
- return t * 25.4 / z;
273
+ return t * 25.4 / v;
274
274
  }
275
- }, G = (t) => {
275
+ }, _ = (t) => {
276
276
  try {
277
277
  let e = "";
278
278
  if (t.includes("base64,")) {
@@ -284,54 +284,54 @@ const C = (t) => t.getTextDimensions("H").h * n.options.page.defaultLineHeightFa
284
284
  /<svg[^>]*\swidth=(?:'|")([0-9.]+)[a-zA-Z]*(?:'|")/i
285
285
  ), r = e.match(
286
286
  /<svg[^>]*\sheight=(?:'|")([0-9.]+)[a-zA-Z]*(?:'|")/i
287
- ), h = e.match(
287
+ ), c = e.match(
288
288
  /<svg[^>]*\sviewBox=(?:'|")[^'"]*(?:'|")/i
289
289
  );
290
- let o = i ? parseFloat(i[1]) : 0, l = r ? parseFloat(r[1]) : 0;
291
- if ((!o || !l) && h) {
292
- const a = h[0].match(
290
+ let o = i ? parseFloat(i[1]) : 0, g = r ? parseFloat(r[1]) : 0;
291
+ if ((!o || !g) && c) {
292
+ const a = c[0].match(
293
293
  /viewBox=(?:'|")([^'"]+)(?:'|")/i
294
294
  );
295
295
  if (a) {
296
296
  const s = a[1].split(/[ ,]+/).filter(Boolean).map(parseFloat);
297
- s.length >= 4 && (o = o || s[2], l = l || s[3]);
297
+ s.length >= 4 && (o = o || s[2], g = g || s[3]);
298
298
  }
299
299
  }
300
- if (o > 0 && l > 0) return { width: o, height: l };
300
+ if (o > 0 && g > 0) return { width: o, height: g };
301
301
  } catch (e) {
302
302
  console.warn("Failed to extract SVG dimensions:", e);
303
303
  }
304
304
  return null;
305
- }, _ = (t, e, i, r, h = "mm") => {
305
+ }, $ = (t, e, i, r, c = "mm") => {
306
306
  if (!e.data)
307
307
  return { finalWidth: 0, finalHeight: 0 };
308
- let o = e.naturalWidth || 0, l = e.naturalHeight || 0;
309
- if (!o || !l)
308
+ let o = e.naturalWidth || 0, g = e.naturalHeight || 0;
309
+ if (!o || !g)
310
310
  if (e.data.startsWith("data:image/svg")) {
311
- const c = G(e.data);
312
- c && (o = c.width, l = c.height);
311
+ const p = _(e.data);
312
+ p && (o = p.width, g = p.height);
313
313
  } else
314
314
  try {
315
- const c = t.getImageProperties(e.data);
316
- o = c.width, l = c.height;
317
- } catch (c) {
315
+ const p = t.getImageProperties(e.data);
316
+ o = p.width, g = p.height;
317
+ } catch (p) {
318
318
  console.warn(
319
319
  "Failed to get image properties for intrinsic sizing:",
320
- c
320
+ p
321
321
  );
322
322
  }
323
- const a = l > 0 ? o / l : 1;
324
- let s, g;
325
- if (e.width && e.height ? (s = k(e.width, h), g = k(e.height, h)) : e.width ? (s = k(e.width, h), g = s / a) : e.height ? (g = k(e.height, h), s = g * a) : (s = k(o, h), g = k(l, h)), s > i) {
326
- const c = i / s;
327
- s = i, g = g * c;
323
+ const a = g > 0 ? o / g : 1;
324
+ let s, l;
325
+ if (e.width && e.height ? (s = k(e.width, c), l = k(e.height, c)) : e.width ? (s = k(e.width, c), l = s / a) : e.height ? (l = k(e.height, c), s = l * a) : (s = k(o, c), l = k(g, c)), s > i) {
326
+ const p = i / s;
327
+ s = i, l = l * p;
328
328
  }
329
- if (g > r) {
330
- const c = r / g;
331
- g = r, s = s * c;
329
+ if (l > r) {
330
+ const p = r / l;
331
+ l = r, s = s * p;
332
332
  }
333
- return { finalWidth: s, finalHeight: g };
334
- }, $ = async (t) => {
333
+ return { finalWidth: s, finalHeight: l };
334
+ }, J = async (t) => {
335
335
  for (const e of t) {
336
336
  if (e.type === u.Image && e.src)
337
337
  try {
@@ -343,31 +343,31 @@ const C = (t) => t.getTextDimensions("H").h * n.options.page.defaultLineHeightFa
343
343
  throw new Error(
344
344
  `Failed to fetch image: ${i.statusText}`
345
345
  );
346
- const r = await i.blob(), h = await new Promise(
347
- (o, l) => {
346
+ const r = await i.blob(), c = await new Promise(
347
+ (o, g) => {
348
348
  const a = new FileReader();
349
349
  a.onloadend = () => {
350
- typeof a.result == "string" ? o(a.result) : l(
350
+ typeof a.result == "string" ? o(a.result) : g(
351
351
  new Error(
352
352
  "Failed to convert image to base64 string"
353
353
  )
354
354
  );
355
- }, a.onerror = l, a.readAsDataURL(r);
355
+ }, a.onerror = g, a.readAsDataURL(r);
356
356
  }
357
357
  );
358
- e.data = h;
358
+ e.data = c;
359
359
  }
360
360
  e.data && e.data.startsWith("data:image/svg") && typeof window < "u" && typeof document < "u" && (e.data = await new Promise((i) => {
361
361
  const r = new Image();
362
362
  r.onload = () => {
363
- const h = document.createElement("canvas"), o = G(
363
+ const c = document.createElement("canvas"), o = _(
364
364
  e.data
365
- ), l = o ? o.width : r.width || 300, a = o ? o.height : r.height || 150;
366
- e.naturalWidth = l, e.naturalHeight = a;
365
+ ), g = o ? o.width : r.width || 300, a = o ? o.height : r.height || 150;
366
+ e.naturalWidth = g, e.naturalHeight = a;
367
367
  const s = 4;
368
- h.width = l * s, h.height = a * s;
369
- const g = h.getContext("2d");
370
- g ? (g.scale(s, s), g.drawImage(r, 0, 0, l, a), i(h.toDataURL("image/png"))) : i(e.data);
368
+ c.width = g * s, c.height = a * s;
369
+ const l = c.getContext("2d");
370
+ l ? (l.scale(s, s), l.drawImage(r, 0, 0, g, a), i(c.toDataURL("image/png"))) : i(e.data);
371
371
  }, r.onerror = () => i(e.data), r.src = e.data;
372
372
  }));
373
373
  } catch (i) {
@@ -376,10 +376,10 @@ const C = (t) => t.getTextDimensions("H").h * n.options.page.defaultLineHeightFa
376
376
  i
377
377
  );
378
378
  }
379
- e.items && e.items.length > 0 && await $(e.items);
379
+ e.items && e.items.length > 0 && await J(e.items);
380
380
  }
381
381
  };
382
- class A {
382
+ class B {
383
383
  // Default codespan styling (can be overridden via RenderStore.options.codespan)
384
384
  static getCodespanOptions() {
385
385
  const e = n.options.codespan ?? {};
@@ -394,10 +394,10 @@ class A {
394
394
  * Apply font style to the jsPDF document.
395
395
  */
396
396
  static applyStyle(e, i) {
397
- const r = e.getFont().fontName, h = e.getFontSize(), o = () => {
397
+ const r = e.getFont().fontName, c = e.getFontSize(), o = () => {
398
398
  const a = n.options.font.bold?.name;
399
399
  return a && a !== "" ? a : r;
400
- }, l = () => {
400
+ }, g = () => {
401
401
  const a = n.options.font.regular?.name;
402
402
  return a && a !== "" ? a : r;
403
403
  };
@@ -409,18 +409,18 @@ class A {
409
409
  );
410
410
  break;
411
411
  case "italic":
412
- e.setFont(l(), "italic");
412
+ e.setFont(g(), "italic");
413
413
  break;
414
414
  case "bolditalic":
415
415
  e.setFont(o(), "bolditalic");
416
416
  break;
417
417
  case "codespan":
418
418
  e.setFont("courier", "normal"), e.setFontSize(
419
- h * this.getCodespanOptions().fontSizeScale
419
+ c * this.getCodespanOptions().fontSizeScale
420
420
  );
421
421
  break;
422
422
  default:
423
- e.setFont(l(), e.getFont().fontStyle);
423
+ e.setFont(g(), e.getFont().fontStyle);
424
424
  break;
425
425
  }
426
426
  }
@@ -430,10 +430,10 @@ class A {
430
430
  * so we must manually add it: effectiveWidth = getTextWidth(text) + (text.length * charSpace)
431
431
  */
432
432
  static measureWordWidth(e, i, r) {
433
- const h = e.getFont(), o = e.getFontSize();
433
+ const c = e.getFont(), o = e.getFontSize();
434
434
  this.applyStyle(e, r);
435
- const l = e.getTextWidth(i), a = e.getCharSpace?.() ?? 0, s = l + i.length * a;
436
- return e.setFont(h.fontName, h.fontStyle), e.setFontSize(o), s;
435
+ const g = e.getTextWidth(i), a = e.getCharSpace?.() ?? 0, s = g + i.length * a;
436
+ return e.setFont(c.fontName, c.fontStyle), e.setFontSize(o), s;
437
437
  }
438
438
  /**
439
439
  * Extract style from element type string.
@@ -454,34 +454,34 @@ class A {
454
454
  * Flatten ParsedElement tree into an array of StyledWordInfo.
455
455
  * Handles nested inline elements.
456
456
  */
457
- static flattenToWords(e, i, r = "normal", h = !1, o) {
458
- const l = [];
457
+ static flattenToWords(e, i, r = "normal", c = !1, o) {
458
+ const g = [];
459
459
  for (const a of i) {
460
- const s = this.getStyleFromType(a.type, r), g = a.type === "link" || h, c = a.href || o;
460
+ const s = this.getStyleFromType(a.type, r), l = a.type === "link" || c, p = a.href || o;
461
461
  if (a.items && a.items.length > 0) {
462
462
  const f = this.flattenToWords(
463
463
  e,
464
464
  a.items,
465
465
  s,
466
- g,
467
- c
466
+ l,
467
+ p
468
468
  );
469
- l.push(...f);
469
+ g.push(...f);
470
470
  } else if (a.type === "image") {
471
- const f = n.options.page.maxContentHeight - n.options.page.topmargin, d = n.options.page.maxContentWidth - n.options.page.indent * 0, p = n.options.page.unit || "mm", { finalWidth: m, finalHeight: x } = _(
471
+ const f = n.options.page.maxContentHeight - n.options.page.topmargin, d = n.options.page.maxContentWidth - n.options.page.indent * 0, h = n.options.page.unit || "mm", { finalWidth: m, finalHeight: x } = $(
472
472
  e,
473
473
  a,
474
474
  d,
475
475
  f,
476
- p
476
+ h
477
477
  );
478
- l.push({
478
+ g.push({
479
479
  text: "",
480
480
  width: m,
481
481
  style: s,
482
- isLink: g,
483
- href: c,
484
- linkColor: g ? n.options.link?.linkColor || [0, 0, 255] : void 0,
482
+ isLink: l,
483
+ href: p,
484
+ linkColor: l ? n.options.link?.linkColor || [0, 0, 255] : void 0,
485
485
  isImage: !0,
486
486
  imageElement: a,
487
487
  imageHeight: x
@@ -490,18 +490,18 @@ class A {
490
490
  const f = a.content || a.text || "";
491
491
  if (!f) continue;
492
492
  if (s === "codespan") {
493
- const p = f.trim();
494
- p && l.push({
495
- text: p,
493
+ const h = f.trim();
494
+ h && g.push({
495
+ text: h,
496
496
  width: this.measureWordWidth(
497
497
  e,
498
- p,
498
+ h,
499
499
  s
500
500
  ),
501
501
  style: s,
502
- isLink: g,
503
- href: c,
504
- linkColor: g ? n.options.link?.linkColor || [
502
+ isLink: l,
503
+ href: p,
504
+ linkColor: l ? n.options.link?.linkColor || [
505
505
  0,
506
506
  0,
507
507
  255
@@ -509,53 +509,53 @@ class A {
509
509
  });
510
510
  continue;
511
511
  }
512
- const d = f.split(/\s+/).filter((p) => p.length > 0);
512
+ const d = f.split(/\s+/).filter((h) => h.length > 0);
513
513
  if (d.length === 0)
514
514
  continue;
515
- for (let p = 0; p < d.length; p++) {
516
- const m = d[p];
517
- l.push({
515
+ for (let h = 0; h < d.length; h++) {
516
+ const m = d[h];
517
+ g.push({
518
518
  text: m,
519
519
  width: this.measureWordWidth(e, m, s),
520
520
  style: s,
521
- isLink: g,
522
- href: c,
523
- linkColor: g ? n.options.link?.linkColor || [0, 0, 255] : void 0
521
+ isLink: l,
522
+ href: p,
523
+ linkColor: l ? n.options.link?.linkColor || [0, 0, 255] : void 0
524
524
  });
525
525
  }
526
526
  }
527
527
  }
528
- return l;
528
+ return g;
529
529
  }
530
530
  /**
531
531
  * Break a flat list of words into lines that fit within maxWidth.
532
532
  * Correctly tracks totalTextWidth (sum of word widths only) for justification.
533
533
  */
534
534
  static breakIntoLines(e, i, r) {
535
- const h = [];
536
- let o = [], l = 0, a = 0, s = C(e) * n.options.page.defaultLineHeightFactor;
537
- const g = e.getTextWidth(" ");
538
- for (let c = 0; c < i.length; c++) {
539
- const f = i[c], d = o.length > 0 ? g + f.width : f.width, p = f.isImage && f.imageHeight ? f.imageHeight : C(e) * n.options.page.defaultLineHeightFactor;
540
- a + d > r && o.length > 0 ? (h.push({
535
+ const c = [];
536
+ let o = [], g = 0, a = 0, s = F(e) * n.options.page.defaultLineHeightFactor;
537
+ const l = e.getTextWidth(" ");
538
+ for (let p = 0; p < i.length; p++) {
539
+ const f = i[p], d = o.length > 0 ? l + f.width : f.width, h = f.isImage && f.imageHeight ? f.imageHeight : F(e) * n.options.page.defaultLineHeightFactor;
540
+ a + d > r && o.length > 0 ? (c.push({
541
541
  words: o,
542
- totalTextWidth: l,
542
+ totalTextWidth: g,
543
543
  isLastLine: !1,
544
544
  lineHeight: s
545
- }), o = [f], l = f.width, a = f.width, s = p) : (o.push(f), l += f.width, a += d, s = Math.max(s, p));
545
+ }), o = [f], g = f.width, a = f.width, s = h) : (o.push(f), g += f.width, a += d, s = Math.max(s, h));
546
546
  }
547
- return o.length > 0 && h.push({
547
+ return o.length > 0 && c.push({
548
548
  words: o,
549
- totalTextWidth: l,
549
+ totalTextWidth: g,
550
550
  isLastLine: !0,
551
551
  lineHeight: s
552
- }), h;
552
+ }), c;
553
553
  }
554
554
  /**
555
555
  * Render a single word with its style applied.
556
556
  */
557
- static renderWord(e, i, r, h) {
558
- const o = e.getFont(), l = e.getFontSize(), a = e.getTextColor();
557
+ static renderWord(e, i, r, c) {
558
+ const o = e.getFont(), g = e.getFontSize(), a = e.getTextColor();
559
559
  if (this.applyStyle(e, i.style), i.isLink && i.linkColor && e.setTextColor(...i.linkColor), i.isImage && i.imageElement && i.imageElement.data)
560
560
  try {
561
561
  let s = "JPEG";
@@ -566,18 +566,18 @@ class A {
566
566
  else if (i.imageElement.data.startsWith("data:image/gif"))
567
567
  s = "GIF";
568
568
  else if (i.imageElement.src) {
569
- const c = i.imageElement.src.split("?")[0].split("#")[0].split(".").pop()?.toUpperCase();
570
- c && ["PNG", "JPEG", "JPG", "WEBP", "GIF"].includes(c) && (s = c === "JPG" ? "JPEG" : c);
569
+ const p = i.imageElement.src.split("?")[0].split("#")[0].split(".").pop()?.toUpperCase();
570
+ p && ["PNG", "JPEG", "JPG", "WEBP", "GIF"].includes(p) && (s = p === "JPG" ? "JPEG" : p);
571
571
  }
572
572
  if (i.width > 0 && (i.imageHeight || 0) > 0) {
573
- const g = i.imageHeight || 0, c = h - g;
573
+ const l = i.imageHeight || 0, p = c;
574
574
  e.addImage(
575
575
  i.imageElement.data,
576
576
  s,
577
577
  r,
578
- c,
578
+ p,
579
579
  i.width,
580
- g
580
+ l
581
581
  );
582
582
  }
583
583
  } catch (s) {
@@ -587,51 +587,51 @@ class A {
587
587
  if (i.style === "codespan") {
588
588
  const s = this.getCodespanOptions();
589
589
  if (s.showBackground) {
590
- const g = C(e), c = s.padding;
590
+ const l = F(e), p = s.padding;
591
591
  e.setFillColor(s.backgroundColor), e.rect(
592
- r - c,
593
- h - c,
594
- i.width + c * 2,
595
- g + c * 2,
592
+ r - p,
593
+ c - p,
594
+ i.width + p * 2,
595
+ l + p * 2,
596
596
  "F"
597
597
  ), e.setFillColor("#000000");
598
598
  }
599
599
  }
600
- e.text(i.text, r, h, { baseline: "top" });
600
+ e.text(i.text, r, c, { baseline: "top" });
601
601
  }
602
602
  if (i.isLink && i.href) {
603
- const s = i.isImage && i.imageHeight ? i.imageHeight : C(e);
604
- e.link(r, h, i.width, s, { url: i.href });
603
+ const s = i.isImage && i.imageHeight ? i.imageHeight : F(e);
604
+ e.link(r, c, i.width, s, { url: i.href });
605
605
  }
606
- e.setFont(o.fontName, o.fontStyle), e.setFontSize(l), e.setTextColor(a);
606
+ e.setFont(o.fontName, o.fontStyle), e.setFontSize(g), e.setTextColor(a);
607
607
  }
608
608
  /**
609
609
  * Render a single line with specified alignment.
610
610
  */
611
- static renderAlignedLine(e, i, r, h, o, l = "left") {
612
- const { words: a, totalTextWidth: s, isLastLine: g } = i;
611
+ static renderAlignedLine(e, i, r, c, o, g = "left") {
612
+ const { words: a, totalTextWidth: s, isLastLine: l } = i;
613
613
  if (a.length === 0) return;
614
- const c = e.getTextWidth(" ");
615
- let f = r, d = c;
616
- const p = s + (a.length - 1) * c;
617
- switch (l) {
614
+ const p = e.getTextWidth(" ");
615
+ let f = r, d = p;
616
+ const h = s + (a.length - 1) * p;
617
+ switch (g) {
618
618
  case "right":
619
- f = r + o - p;
619
+ f = r + o - h;
620
620
  break;
621
621
  case "center":
622
- f = r + (o - p) / 2;
622
+ f = r + (o - h) / 2;
623
623
  break;
624
624
  case "justify":
625
- !g && a.length > 1 && (d = (o - s) / (a.length - 1));
625
+ !l && a.length > 1 && (d = (o - s) / (a.length - 1));
626
626
  break;
627
627
  }
628
628
  let m = f;
629
- const x = C(e) * n.options.page.defaultLineHeightFactor;
630
- for (let F = 0; F < a.length; F++) {
631
- const b = a[F];
632
- let H = h;
633
- const w = b.isImage && b.imageHeight ? b.imageHeight : x;
634
- w < i.lineHeight && (H = h + (i.lineHeight - w)), this.renderWord(e, b, m, H), m += b.width, F < a.length - 1 && (m += d);
629
+ const x = F(e) * n.options.page.defaultLineHeightFactor;
630
+ for (let b = 0; b < a.length; b++) {
631
+ const C = a[b];
632
+ let y = c;
633
+ const W = C.isImage && C.imageHeight ? C.imageHeight : x;
634
+ C.isImage ? y = c : W < i.lineHeight && (y = c + (i.lineHeight - W)), this.renderWord(e, C, m, y), m += C.width, b < a.length - 1 && (m += d);
635
635
  }
636
636
  }
637
637
  /**
@@ -645,21 +645,21 @@ class A {
645
645
  * @param maxWidth Maximum width for text wrapping
646
646
  * @param alignment Optional alignment override (defaults to RenderStore option)
647
647
  */
648
- static renderStyledParagraph(e, i, r, h, o, l) {
649
- const a = l ?? n.options.content?.textAlignment ?? "left", s = this.flattenToWords(e, i);
648
+ static renderStyledParagraph(e, i, r, c, o, g) {
649
+ const a = g ?? n.options.content?.textAlignment ?? "left", s = this.flattenToWords(e, i);
650
650
  if (s.length === 0) return;
651
- const g = this.breakIntoLines(e, s, o);
652
- let c = h;
653
- for (const d of g)
654
- c + d.lineHeight > n.options.page.maxContentHeight && (Y(e), c = n.Y), this.renderAlignedLine(
651
+ const l = this.breakIntoLines(e, s, o);
652
+ let p = c;
653
+ for (const d of l)
654
+ p + d.lineHeight > n.options.page.maxContentHeight && (Y(e), p = n.Y), this.renderAlignedLine(
655
655
  e,
656
656
  d,
657
657
  r,
658
- c,
658
+ p,
659
659
  o,
660
660
  a
661
- ), n.recordContentY(c + d.lineHeight), c += d.lineHeight, n.updateY(d.lineHeight, "add");
662
- const f = g[g.length - 1];
661
+ ), n.recordContentY(p + d.lineHeight), p += d.lineHeight, n.updateY(d.lineHeight, "add");
662
+ const f = l[l.length - 1];
663
663
  if (f) {
664
664
  const d = f.totalTextWidth + (f.words.length - 1) * e.getTextWidth(" ");
665
665
  n.updateX(r + d, "set");
@@ -668,11 +668,11 @@ class A {
668
668
  /**
669
669
  * @deprecated Use renderStyledParagraph instead
670
670
  */
671
- static renderJustifiedParagraph(e, i, r, h, o) {
672
- this.renderStyledParagraph(e, i, r, h, o);
671
+ static renderJustifiedParagraph(e, i, r, c, o) {
672
+ this.renderStyledParagraph(e, i, r, c, o);
673
673
  }
674
674
  }
675
- class T {
675
+ class L {
676
676
  /**
677
677
  * Renders text with automatic line wrapping and page breaking.
678
678
  * @param doc jsPDF instance
@@ -682,23 +682,23 @@ class T {
682
682
  * @param maxWidth Max width for text wrapping
683
683
  * @param justify Whether to justify the text
684
684
  */
685
- static renderText(e, i, r = n.X, h = n.Y, o, l = !1) {
686
- const a = e.splitTextToSize(i, o), s = C(e), g = s * n.options.page.defaultLineHeightFactor;
687
- let c = h;
685
+ static renderText(e, i, r = n.X, c = n.Y, o, g = !1) {
686
+ const a = e.splitTextToSize(i, o), s = F(e), l = s * n.options.page.defaultLineHeightFactor;
687
+ let p = c;
688
688
  for (let f = 0; f < a.length; f++) {
689
689
  const d = a[f];
690
- c + g > n.options.page.maxContentHeight && (Y(e), c = n.Y), l ? f === a.length - 1 ? e.text(d, r, c, { baseline: "top" }) : e.text(d, r, c, {
690
+ p + l > n.options.page.maxContentHeight && (Y(e), p = n.Y), g ? f === a.length - 1 ? e.text(d, r, p, { baseline: "top" }) : e.text(d, r, p, {
691
691
  maxWidth: o,
692
692
  align: "justify",
693
693
  baseline: "top"
694
- }) : e.text(d, r, c, { baseline: "top" }), n.recordContentY(c + s), c += g, n.updateY(g, "add");
694
+ }) : e.text(d, r, p, { baseline: "top" }), n.recordContentY(p + s), p += l, n.updateY(l, "add");
695
695
  }
696
- return c;
696
+ return p;
697
697
  }
698
698
  }
699
- const nt = (t, e, i, r) => {
699
+ const et = (t, e, i, r) => {
700
700
  n.activateInlineLock(), t.setFontSize(n.options.page.defaultFontSize);
701
- const h = n.options.page.maxContentWidth - i;
701
+ const c = n.options.page.maxContentWidth - i;
702
702
  if (e?.items && e?.items.length > 0) {
703
703
  if (e.items.length === 1 && e.items[0].type === "image") {
704
704
  r(e.items[0], i, !1), n.updateX(n.options.page.xpading), n.deactivateInlineLock();
@@ -716,181 +716,181 @@ const nt = (t, e, i, r) => {
716
716
  (a) => !o.includes(a.type)
717
717
  )) {
718
718
  const a = [], s = () => {
719
- a.length > 0 && (A.renderStyledParagraph(
719
+ a.length > 0 && (B.renderStyledParagraph(
720
720
  t,
721
721
  a,
722
722
  n.X + i,
723
723
  n.Y,
724
- h
724
+ c
725
725
  ), a.length = 0);
726
726
  };
727
- for (const g of e.items)
728
- o.includes(g.type) ? a.push(g) : (s(), r(g, i, !1));
727
+ for (const l of e.items)
728
+ o.includes(l.type) ? a.push(l) : (s(), r(l, i, !1));
729
729
  s();
730
730
  } else
731
- A.renderStyledParagraph(
731
+ B.renderStyledParagraph(
732
732
  t,
733
733
  e.items,
734
734
  n.X + i,
735
735
  n.Y,
736
- h
736
+ c
737
737
  );
738
738
  } else {
739
- const o = e.content ?? "", l = n.options.content?.textAlignment ?? "left";
740
- o.trim() && T.renderText(
739
+ const o = e.content ?? "", g = n.options.content?.textAlignment ?? "left";
740
+ o.trim() && L.renderText(
741
741
  t,
742
742
  o,
743
743
  n.X + i,
744
744
  n.Y,
745
- h,
746
- l === "justify"
745
+ c,
746
+ g === "justify"
747
747
  );
748
748
  }
749
749
  n.updateX(n.options.page.xpading), n.deactivateInlineLock();
750
- }, it = (t, e, i, r) => {
750
+ }, nt = (t, e, i, r) => {
751
751
  t.setFontSize(n.options.page.defaultFontSize);
752
- for (const [h, o] of e?.items?.entries() ?? []) {
753
- const l = e.ordered ? (e.start ?? 0) + h : e.start;
752
+ for (const [c, o] of e?.items?.entries() ?? []) {
753
+ const g = e.ordered ? (e.start ?? 0) + c : e.start;
754
754
  r(
755
755
  o,
756
756
  i + 1,
757
757
  !0,
758
- l,
758
+ g,
759
759
  e.ordered
760
760
  );
761
761
  }
762
- }, st = (t, e, i, r, h, o) => {
763
- n.Y + C(t) >= n.options.page.maxContentHeight && Y(t);
764
- const l = n.options, a = i * l.page.indent, s = o ? `${h}. ` : "• ", g = l.page.xpading;
765
- n.updateX(g, "set"), t.setFont(l.font.regular.name, l.font.regular.style), t.text(s, g + a, n.Y, { baseline: "top" });
766
- const c = t.getTextWidth(s), f = g + a + c, d = l.page.maxContentWidth - a - c;
762
+ }, it = (t, e, i, r, c, o) => {
763
+ n.Y + F(t) >= n.options.page.maxContentHeight && Y(t);
764
+ const g = n.options, a = i * g.page.indent, s = o ? `${c}. ` : "• ", l = g.page.xpading;
765
+ n.updateX(l, "set"), t.setFont(g.font.regular.name, g.font.regular.style), t.text(s, l + a, n.Y, { baseline: "top" });
766
+ const p = t.getTextWidth(s), f = l + a + p, d = g.page.maxContentWidth - a - p;
767
767
  if (e.items && e.items.length > 0) {
768
- const p = [], m = () => {
769
- p.length > 0 && (A.renderStyledParagraph(
768
+ const h = [], m = () => {
769
+ h.length > 0 && (B.renderStyledParagraph(
770
770
  t,
771
- p,
771
+ h,
772
772
  f,
773
773
  n.Y,
774
774
  d
775
- ), p.length = 0, n.updateX(g, "set"));
775
+ ), h.length = 0, n.updateX(l, "set"));
776
776
  };
777
777
  for (const x of e.items)
778
778
  x.type === u.List ? (m(), r(
779
779
  x,
780
780
  i,
781
781
  !0,
782
- h,
782
+ c,
783
783
  x.ordered ?? !1
784
784
  )) : x.type === u.ListItem ? (m(), r(
785
785
  x,
786
786
  i,
787
787
  !0,
788
- h,
788
+ c,
789
789
  o
790
- )) : p.push(x);
790
+ )) : h.push(x);
791
791
  m();
792
792
  } else if (e.content) {
793
- const p = l.content?.textAlignment ?? "left";
794
- T.renderText(
793
+ const h = g.content?.textAlignment ?? "left";
794
+ L.renderText(
795
795
  t,
796
796
  e.content,
797
797
  f,
798
798
  n.Y,
799
799
  d,
800
- p === "justify"
800
+ h === "justify"
801
801
  );
802
802
  }
803
- }, at = (t, e, i, r, h, o, l, a = !0) => {
803
+ }, st = (t, e, i, r, c, o, g, a = !0) => {
804
804
  if (e?.items && e?.items.length > 0)
805
805
  for (const s of e?.items ?? [])
806
- h(
806
+ c(
807
807
  s,
808
808
  i,
809
809
  r,
810
810
  o,
811
- l,
811
+ g,
812
812
  a
813
813
  );
814
814
  else {
815
- const s = n.options, g = i * s.page.indent, c = r ? l ? `${o}. ` : "• " : "", f = e.content || "", d = s.page.xpading;
816
- if (!f && !c) return;
817
- if (!f.trim() && !c) {
818
- const p = (f.match(/\n/g) || []).length;
819
- if (p > 1) {
820
- const m = p - 1, x = t.getTextDimensions("A").h * s.page.defaultLineHeightFactor, F = m * x;
821
- n.Y + F > s.page.maxContentHeight ? Y(t) : (n.updateY(F, "add"), n.recordContentY(n.Y));
815
+ const s = n.options, l = i * s.page.indent, p = r ? g ? `${o}. ` : "• " : "", f = e.content || "", d = s.page.xpading;
816
+ if (!f && !p) return;
817
+ if (!f.trim() && !p) {
818
+ const h = (f.match(/\n/g) || []).length;
819
+ if (h > 1) {
820
+ const m = h - 1, x = t.getTextDimensions("A").h * s.page.defaultLineHeightFactor, b = m * x;
821
+ n.Y + b > s.page.maxContentHeight ? Y(t) : (n.updateY(b, "add"), n.recordContentY(n.Y));
822
822
  }
823
823
  return;
824
824
  }
825
- if (n.updateX(d, "set"), r && c) {
826
- const p = t.getTextWidth(c), m = s.page.maxContentWidth - g - p;
827
- t.setFont(s.font.regular.name, s.font.regular.style), t.text(c, d + g, n.Y, {
825
+ if (n.updateX(d, "set"), r && p) {
826
+ const h = t.getTextWidth(p), m = s.page.maxContentWidth - l - h;
827
+ t.setFont(s.font.regular.name, s.font.regular.style), t.text(p, d + l, n.Y, {
828
828
  baseline: "top"
829
- }), T.renderText(
829
+ }), L.renderText(
830
830
  t,
831
831
  f,
832
- d + g + p,
832
+ d + l + h,
833
833
  n.Y,
834
834
  m,
835
835
  a
836
836
  );
837
837
  } else {
838
- const p = s.page.maxContentWidth - g;
839
- T.renderText(
838
+ const h = s.page.maxContentWidth - l;
839
+ L.renderText(
840
840
  t,
841
841
  f,
842
- d + g,
842
+ d + l,
843
843
  n.Y,
844
- p,
844
+ h,
845
845
  a
846
846
  );
847
847
  }
848
848
  n.updateX(d, "set");
849
849
  }
850
- }, ot = (t) => {
850
+ }, at = (t) => {
851
851
  const e = t.internal.pageSize.getWidth();
852
852
  t.setLineDashPattern([1, 1], 0), t.setLineWidth(0.1), t.line(
853
853
  n.options.page.xpading,
854
854
  n.Y,
855
855
  e - n.options.page.xpading,
856
856
  n.Y
857
- ), t.setLineWidth(0.1), t.setLineDashPattern([], 0), n.updateY(C(t), "add");
858
- }, rt = (t, e, i, r) => {
859
- const h = t.getFont(), o = t.getFontSize();
857
+ ), t.setLineWidth(0.1), t.setLineDashPattern([], 0), n.updateY(F(t), "add");
858
+ }, ot = (t, e, i) => {
859
+ const r = t.getFont(), c = t.getFontSize();
860
860
  t.setFont("courier", "normal");
861
- const l = n.options.page.defaultFontSize * 0.9;
862
- t.setFontSize(l);
863
- const a = i * n.options.page.indent, s = n.options.page.maxContentWidth - a - 8, g = t.getLineHeightFactor(), c = l / t.internal.scaleFactor * g, d = (e.code ?? "").replace(/[\r\n\s]+$/, "");
864
- if (!d) {
865
- t.setFont(h.fontName, h.fontStyle), t.setFontSize(o);
861
+ const o = n.options.page.defaultFontSize * 0.9;
862
+ t.setFontSize(o);
863
+ const g = i * n.options.page.indent, a = n.options.page.maxContentWidth - g - 8, s = t.getLineHeightFactor(), l = o / t.internal.scaleFactor * s, f = (e.code ?? "").replace(/[\r\n\s]+$/, "");
864
+ if (!f) {
865
+ t.setFont(r.fontName, r.fontStyle), t.setFontSize(c);
866
866
  return;
867
867
  }
868
- const p = t.splitTextToSize(d, s);
869
- for (; p.length > 0 && p[p.length - 1].trim() === ""; )
870
- p.pop();
871
- if (p.length === 0) {
872
- t.setFont(h.fontName, h.fontStyle), t.setFontSize(o);
868
+ const d = t.splitTextToSize(f, a);
869
+ for (; d.length > 0 && d[d.length - 1].trim() === ""; )
870
+ d.pop();
871
+ if (d.length === 0) {
872
+ t.setFont(r.fontName, r.fontStyle), t.setFontSize(c);
873
873
  return;
874
874
  }
875
- const m = 4, x = "#EEEEEE", F = "#DDDDDD";
875
+ const h = 4, m = "#EEEEEE", x = "#DDDDDD";
876
876
  let b = 0;
877
- for (; b < p.length; ) {
878
- const H = n.options.page.maxContentHeight - n.Y, w = p.length - b, L = H - m * 2;
879
- let S = Math.floor(L / c);
877
+ for (; b < d.length; ) {
878
+ const C = n.options.page.maxContentHeight - n.Y, y = d.length - b, W = C - h * 2;
879
+ let S = Math.floor(W / l);
880
880
  if (S <= 0) {
881
881
  Y(t);
882
882
  continue;
883
883
  }
884
- S > w && (S = w);
885
- const J = p.slice(
884
+ S > y && (S = y);
885
+ const T = d.slice(
886
886
  b,
887
887
  b + S
888
- ), E = b === 0, X = b + S >= p.length, B = S * c;
889
- if (E && n.updateY(m, "add"), t.setFillColor(x), t.setDrawColor(F), t.roundedRect(
888
+ ), E = b === 0, X = b + S >= d.length, N = S * l;
889
+ if (E && n.updateY(h, "add"), t.setFillColor(m), t.setDrawColor(x), t.roundedRect(
890
890
  n.X,
891
- n.Y - m,
891
+ n.Y - h,
892
892
  n.options.page.maxContentWidth,
893
- B + (E ? m : 0) + (X ? m : 0),
893
+ N + (E ? h : 0) + (X ? h : 0),
894
894
  2,
895
895
  2,
896
896
  "FD"
@@ -903,14 +903,14 @@ const nt = (t, e, i, r) => {
903
903
  { baseline: "top" }
904
904
  ), t.setFontSize(P), t.setTextColor("#000000");
905
905
  }
906
- let N = n.Y;
907
- for (const P of J)
908
- t.text(P, n.X + 4, N, { baseline: "top" }), N += c;
909
- n.updateY(B, "add"), n.recordContentY(n.Y + (X ? m : 0)), X && n.updateY(m, "add"), b += S, b < p.length && Y(t);
906
+ let R = n.Y;
907
+ for (const P of T)
908
+ t.text(P, n.X + 4, R, { baseline: "top" }), R += l;
909
+ n.updateY(N, "add"), n.recordContentY(n.Y + (X ? h : 0)), X && n.updateY(h, "add"), b += S, b < d.length && Y(t);
910
910
  }
911
- t.setFont(h.fontName, h.fontStyle), t.setFontSize(o);
912
- }, lt = (t, e, i) => {
913
- const r = t.getFont().fontName, h = t.getFont().fontStyle, o = t.getFontSize(), l = (s) => {
911
+ t.setFont(r.fontName, r.fontStyle), t.setFontSize(c);
912
+ }, rt = (t, e, i) => {
913
+ const r = t.getFont().fontName, c = t.getFont().fontStyle, o = t.getFontSize(), g = (s) => {
914
914
  switch (s) {
915
915
  case "normal":
916
916
  return 0;
@@ -925,27 +925,27 @@ const nt = (t, e, i, r) => {
925
925
  default:
926
926
  return 0;
927
927
  }
928
- }, a = (s, g) => {
929
- g === "bold" ? t.setFont(
928
+ }, a = (s, l) => {
929
+ l === "bold" ? t.setFont(
930
930
  n.options.font.bold.name && n.options.font.bold.name !== "" ? n.options.font.bold.name : r,
931
931
  n.options.font.bold.style || "bold"
932
- ) : g === "italic" ? t.setFont(n.options.font.regular.name, "italic") : g === "bolditalic" ? t.setFont(
932
+ ) : l === "italic" ? t.setFont(n.options.font.regular.name, "italic") : l === "bolditalic" ? t.setFont(
933
933
  n.options.font.bold.name && n.options.font.bold.name !== "" ? n.options.font.bold.name : r,
934
934
  "bolditalic"
935
- ) : g === "codespan" ? (t.setFont("courier", "normal"), t.setFontSize(o * 0.9)) : t.setFont(
935
+ ) : l === "codespan" ? (t.setFont("courier", "normal"), t.setFontSize(o * 0.9)) : t.setFont(
936
936
  n.options.font.regular.name,
937
- h
937
+ c
938
938
  );
939
- const c = n.options.page.maxContentWidth - i - n.X, f = t.splitTextToSize(s, c), d = g === "codespan", p = 1, m = "#EEEEEE";
939
+ const p = n.options.page.maxContentWidth - i - n.X, f = t.splitTextToSize(s, p), d = l === "codespan", h = 1, m = "#EEEEEE";
940
940
  if (n.isInlineLockActive)
941
941
  for (let x = 0; x < f.length; x++) {
942
942
  if (d) {
943
- const F = t.getTextWidth(f[x]) + y(t), b = C(t);
943
+ const b = t.getTextWidth(f[x]) + H(t), C = F(t);
944
944
  t.setFillColor(m), t.roundedRect(
945
- n.X + i - p,
946
- n.Y - p,
947
- F + p * 2,
948
- b + p * 2,
945
+ n.X + i - h,
946
+ n.Y - h,
947
+ b + h * 2,
948
+ C + h * 2,
949
949
  2,
950
950
  2,
951
951
  "F"
@@ -953,24 +953,24 @@ const nt = (t, e, i, r) => {
953
953
  }
954
954
  t.text(f[x], n.X + i, n.Y, {
955
955
  baseline: "top",
956
- maxWidth: c
956
+ maxWidth: p
957
957
  }), n.updateX(
958
- t.getTextDimensions(f[x]).w + (d ? p * 2 : 1),
958
+ t.getTextDimensions(f[x]).w + (d ? h * 2 : 1),
959
959
  "add"
960
- ), x < f.length - 1 && (n.updateY(C(t), "add"), n.updateX(
960
+ ), x < f.length - 1 && (n.updateY(F(t), "add"), n.updateX(
961
961
  n.options.page.xpading,
962
962
  "set"
963
963
  ));
964
964
  }
965
965
  else if (f.length > 1) {
966
- const x = f[0], F = f?.slice(1)?.join(" ");
966
+ const x = f[0], b = f?.slice(1)?.join(" ");
967
967
  if (d) {
968
- const w = t.getTextWidth(x) + y(t), L = C(t);
968
+ const W = t.getTextWidth(x) + H(t), S = F(t);
969
969
  t.setFillColor(m), t.roundedRect(
970
- n.X + (i >= 2 ? i + 2 : 0) - p,
971
- n.Y - p,
972
- w + p * 2,
973
- L + p * 2,
970
+ n.X + (i >= 2 ? i + 2 : 0) - h,
971
+ n.Y - h,
972
+ W + h * 2,
973
+ S + h * 2,
974
974
  2,
975
975
  2,
976
976
  "F"
@@ -978,48 +978,48 @@ const nt = (t, e, i, r) => {
978
978
  }
979
979
  t.text(
980
980
  x,
981
- n.X + (i >= 2 ? i + 2 * l(g) : 0),
981
+ n.X + (i >= 2 ? i + 2 * g(l) : 0),
982
982
  n.Y,
983
983
  {
984
984
  baseline: "top",
985
- maxWidth: c
985
+ maxWidth: p
986
986
  }
987
- ), n.updateX(n.options.page.xpading + i), n.updateY(C(t), "add");
988
- const b = n.options.page.maxContentWidth - i - n.options.page.xpading;
987
+ ), n.updateX(n.options.page.xpading + i), n.updateY(F(t), "add");
988
+ const C = n.options.page.maxContentWidth - i - n.options.page.xpading;
989
989
  t.splitTextToSize(
990
- F,
991
- b
992
- ).forEach((w) => {
990
+ b,
991
+ C
992
+ ).forEach((W) => {
993
993
  if (d) {
994
- const L = t.getTextWidth(w) + y(t), S = C(t);
994
+ const S = t.getTextWidth(W) + H(t), T = F(t);
995
995
  t.setFillColor(m), t.roundedRect(
996
- n.X + y(t) - p,
997
- n.Y - p,
998
- L + p * 2,
999
- S + p * 2,
996
+ n.X + H(t) - h,
997
+ n.Y - h,
998
+ S + h * 2,
999
+ T + h * 2,
1000
1000
  2,
1001
1001
  2,
1002
1002
  "F"
1003
1003
  ), t.setFillColor("#000000");
1004
1004
  }
1005
1005
  t.text(
1006
- w,
1007
- n.X + y(t),
1006
+ W,
1007
+ n.X + H(t),
1008
1008
  n.Y,
1009
1009
  {
1010
1010
  baseline: "top",
1011
- maxWidth: b
1011
+ maxWidth: C
1012
1012
  }
1013
1013
  );
1014
1014
  });
1015
1015
  } else {
1016
1016
  if (d) {
1017
- const x = t.getTextWidth(s) + y(t), F = C(t);
1017
+ const x = t.getTextWidth(s) + H(t), b = F(t);
1018
1018
  t.setFillColor(m), t.roundedRect(
1019
- n.X + i - p,
1020
- n.Y - p,
1021
- x + p * 2,
1022
- F + p * 2,
1019
+ n.X + i - h,
1020
+ n.Y - h,
1021
+ x + h * 2,
1022
+ b + h * 2,
1023
1023
  2,
1024
1024
  2,
1025
1025
  "F"
@@ -1027,9 +1027,9 @@ const nt = (t, e, i, r) => {
1027
1027
  }
1028
1028
  t.text(s, n.X + i, n.Y, {
1029
1029
  baseline: "top",
1030
- maxWidth: c
1030
+ maxWidth: p
1031
1031
  }), n.updateX(
1032
- t.getTextDimensions(s).w + (i >= 2 ? s.split(" ").length + 2 : 2) * l(g) * 0.5 + (d ? p * 2 : 0),
1032
+ t.getTextDimensions(s).w + (i >= 2 ? s.split(" ").length + 2 : 2) * g(l) * 0.5 + (d ? h * 2 : 0),
1033
1033
  "add"
1034
1034
  );
1035
1035
  }
@@ -1039,39 +1039,39 @@ const nt = (t, e, i, r) => {
1039
1039
  if (s.type === "codespan")
1040
1040
  a(s.content || "", "codespan");
1041
1041
  else if (s.type === "em" || s.type === "strong") {
1042
- const g = s.type === "em" ? "italic" : "bold";
1042
+ const l = s.type === "em" ? "italic" : "bold";
1043
1043
  if (s.items && s.items.length > 0)
1044
- for (const c of s.items)
1045
- c.type === "strong" && g === "italic" || c.type === "em" && g === "bold" ? a(
1046
- c.content || "",
1044
+ for (const p of s.items)
1045
+ p.type === "strong" && l === "italic" || p.type === "em" && l === "bold" ? a(
1046
+ p.content || "",
1047
1047
  "bolditalic"
1048
1048
  ) : a(
1049
- c.content || "",
1050
- g
1049
+ p.content || "",
1050
+ l
1051
1051
  );
1052
1052
  else
1053
- a(s.content || "", g);
1053
+ a(s.content || "", l);
1054
1054
  } else
1055
1055
  a(s.content || "", "normal");
1056
1056
  else e.type === "em" ? a(e.content || "", "italic") : e.type === "strong" ? a(e.content || "", "bold") : e.type === "codespan" ? a(e.content || "", "codespan") : a(e.content || "", "normal");
1057
- t.setFont(r, h), t.setFontSize(o);
1058
- }, gt = (t, e, i) => {
1059
- const r = t.getFont().fontName, h = t.getFont().fontStyle, o = t.getFontSize(), l = t.getTextColor(), a = n.options.link?.linkColor || [0, 0, 255];
1057
+ t.setFont(r, c), t.setFontSize(o);
1058
+ }, lt = (t, e, i) => {
1059
+ const r = t.getFont().fontName, c = t.getFont().fontStyle, o = t.getFontSize(), g = t.getTextColor(), a = n.options.link?.linkColor || [0, 0, 255];
1060
1060
  t.setTextColor(...a);
1061
- const s = n.options.page.maxContentWidth - i - n.X, g = e.text || e.content || "", c = e.href || "", f = t.splitTextToSize(g, s);
1061
+ const s = n.options.page.maxContentWidth - i - n.X, l = e.text || e.content || "", p = e.href || "", f = t.splitTextToSize(l, s);
1062
1062
  if (n.isInlineLockActive)
1063
1063
  for (let d = 0; d < f.length; d++) {
1064
- const p = t.getTextDimensions(f[d]).w, m = C(t) / 2;
1064
+ const h = t.getTextDimensions(f[d]).w, m = F(t) / 2;
1065
1065
  t.link(
1066
1066
  n.X + i,
1067
1067
  n.Y,
1068
- p,
1068
+ h,
1069
1069
  m,
1070
- { url: c }
1070
+ { url: p }
1071
1071
  ), t.text(f[d], n.X + i, n.Y, {
1072
1072
  baseline: "top",
1073
1073
  maxWidth: s
1074
- }), n.updateX(p + 1, "add"), n.X + p > n.options.page.maxContentWidth - i && (n.updateY(m, "add"), n.updateX(
1074
+ }), n.updateX(h + 1, "add"), n.X + h > n.options.page.maxContentWidth - i && (n.updateY(m, "add"), n.updateX(
1075
1075
  n.options.page.xpading + i,
1076
1076
  "set"
1077
1077
  )), d < f.length - 1 && (n.updateY(m, "add"), n.updateX(
@@ -1080,64 +1080,64 @@ const nt = (t, e, i, r) => {
1080
1080
  ));
1081
1081
  }
1082
1082
  else if (f.length > 1) {
1083
- const d = f[0], p = f?.slice(1)?.join(" "), m = t.getTextDimensions(d).w, x = C(t) / 2;
1083
+ const d = f[0], h = f?.slice(1)?.join(" "), m = t.getTextDimensions(d).w, x = F(t) / 2;
1084
1084
  t.link(
1085
1085
  n.X + i,
1086
1086
  n.Y,
1087
1087
  m,
1088
1088
  x,
1089
- { url: c }
1089
+ { url: p }
1090
1090
  ), t.text(d, n.X + i, n.Y, {
1091
1091
  baseline: "top",
1092
1092
  maxWidth: s
1093
1093
  }), n.updateX(n.options.page.xpading + i), n.updateY(x, "add");
1094
- const F = n.options.page.maxContentWidth - i - n.options.page.xpading;
1095
- t.splitTextToSize(p, F).forEach((H) => {
1096
- const w = t.getTextDimensions(H).w;
1094
+ const b = n.options.page.maxContentWidth - i - n.options.page.xpading;
1095
+ t.splitTextToSize(h, b).forEach((y) => {
1096
+ const W = t.getTextDimensions(y).w;
1097
1097
  t.link(
1098
- n.X + y(t),
1098
+ n.X + H(t),
1099
1099
  n.Y,
1100
- w,
1100
+ W,
1101
1101
  x,
1102
- { url: c }
1102
+ { url: p }
1103
1103
  ), t.text(
1104
- H,
1105
- n.X + y(t),
1104
+ y,
1105
+ n.X + H(t),
1106
1106
  n.Y,
1107
1107
  {
1108
1108
  baseline: "top",
1109
- maxWidth: F
1109
+ maxWidth: b
1110
1110
  }
1111
1111
  );
1112
1112
  });
1113
1113
  } else {
1114
- const d = t.getTextDimensions(g).w, p = C(t) / 2;
1114
+ const d = t.getTextDimensions(l).w, h = F(t) / 2;
1115
1115
  t.link(
1116
1116
  n.X + i,
1117
1117
  n.Y,
1118
1118
  d,
1119
- p,
1120
- { url: c }
1121
- ), t.text(g, n.X + i, n.Y, {
1119
+ h,
1120
+ { url: p }
1121
+ ), t.text(l, n.X + i, n.Y, {
1122
1122
  baseline: "top",
1123
1123
  maxWidth: s
1124
1124
  }), n.updateX(d + 2, "add");
1125
1125
  }
1126
- t.setFont(r, h), t.setFontSize(o), t.setTextColor(l);
1127
- }, ct = (t, e, i, r) => {
1128
- const h = n.options, o = i + 1, l = n.X + i * h.page.indent, a = n.Y, s = l + h.page.indent / 2, g = a, c = t.internal.getCurrentPageInfo().pageNumber;
1129
- e.items && e.items.length > 0 && e.items.forEach((p) => {
1130
- r(p, o);
1126
+ t.setFont(r, c), t.setFontSize(o), t.setTextColor(g);
1127
+ }, gt = (t, e, i, r) => {
1128
+ const c = n.options, o = i + 1, g = n.X + i * c.page.indent, a = n.Y, s = g + c.page.indent / 2, l = a, p = t.internal.getCurrentPageInfo().pageNumber;
1129
+ e.items && e.items.length > 0 && e.items.forEach((h) => {
1130
+ r(h, o);
1131
1131
  });
1132
1132
  const f = n.Y, d = t.internal.getCurrentPageInfo().pageNumber;
1133
1133
  t.setDrawColor(100), t.setLineWidth(1);
1134
- for (let p = c; p <= d; p++) {
1135
- t.setPage(p);
1136
- const m = p === c, x = p === d, F = m ? g : h.page.topmargin, b = x ? f : h.page.maxContentHeight;
1137
- t.line(s, F, s, b);
1134
+ for (let h = p; h <= d; h++) {
1135
+ t.setPage(h);
1136
+ const m = h === p, x = h === d, b = m ? l : c.page.topmargin, C = x ? f : c.page.maxContentHeight;
1137
+ t.line(s, b, s, C);
1138
1138
  }
1139
1139
  n.recordContentY(), t.setPage(d);
1140
- }, ht = (t) => {
1140
+ }, ct = (t) => {
1141
1141
  if (t.data) {
1142
1142
  if (t.data.startsWith("data:image/png")) return "PNG";
1143
1143
  if (t.data.startsWith("data:image/jpeg") || t.data.startsWith("data:image/jpg"))
@@ -1154,53 +1154,64 @@ const nt = (t, e, i, r) => {
1154
1154
  }, pt = (t, e, i) => {
1155
1155
  if (!e.data)
1156
1156
  return;
1157
- const r = n.options, h = r.page.unit || "mm", o = i * r.page.indent, l = r.page.maxContentWidth - o, a = n.X + o;
1157
+ const r = n.options, c = r.page.unit || "mm", o = i * r.page.indent, g = r.page.maxContentWidth - o, a = n.X + o;
1158
1158
  let s = n.Y;
1159
1159
  try {
1160
- const g = r.page.maxContentHeight - r.page.topmargin, { finalWidth: c, finalHeight: f } = _(
1160
+ const l = r.page.maxContentHeight - r.page.topmargin, { finalWidth: p, finalHeight: f } = $(
1161
1161
  t,
1162
1162
  e,
1163
- l,
1164
1163
  g,
1165
- h
1164
+ l,
1165
+ c
1166
1166
  );
1167
1167
  s + f > r.page.maxContentHeight && (Y(t), s = n.Y);
1168
1168
  const d = e.align || r.image?.defaultAlign || "left";
1169
- let p;
1169
+ let h;
1170
1170
  switch (d) {
1171
1171
  case "right":
1172
- p = a + l - c;
1172
+ h = a + g - p;
1173
1173
  break;
1174
1174
  case "center":
1175
- p = a + (l - c) / 2;
1175
+ h = a + (g - p) / 2;
1176
1176
  break;
1177
1177
  default:
1178
- p = a;
1178
+ h = a;
1179
1179
  break;
1180
1180
  }
1181
- const m = ht(e);
1182
- c > 0 && f > 0 && t.addImage(
1181
+ const m = ct(e);
1182
+ p > 0 && f > 0 && t.addImage(
1183
1183
  e.data,
1184
1184
  m,
1185
- p,
1185
+ h,
1186
1186
  s,
1187
- c,
1187
+ p,
1188
1188
  f
1189
1189
  ), n.updateY(f, "add"), n.recordContentY();
1190
- } catch (g) {
1191
- console.warn("Failed to render image", g);
1190
+ } catch (l) {
1191
+ console.warn("Failed to render image", l);
1192
1192
  }
1193
+ }, ht = () => {
1194
+ const t = z;
1195
+ if (typeof z == "function")
1196
+ return z;
1197
+ if (typeof t.default == "function")
1198
+ return t.default;
1199
+ if (typeof t.autoTable == "function")
1200
+ return t.autoTable;
1201
+ throw new Error(
1202
+ "Could not resolve jspdf-autotable export. Expected a callable export."
1203
+ );
1193
1204
  }, ft = (t, e, i) => {
1194
1205
  if (!e.header || !e.rows)
1195
1206
  return;
1196
- const r = n.options, h = r.page.xmargin + i * r.page.indent, o = [e.header.map((s) => s.content || "")], l = e.rows.map(
1197
- (s) => s.map((g) => g.content || "")
1207
+ const r = n.options, c = r.page.xmargin + i * r.page.indent, o = [e.header.map((s) => s.content || "")], g = e.rows.map(
1208
+ (s) => s.map((l) => l.content || "")
1198
1209
  ), a = r.table || {};
1199
- O(t, {
1210
+ ht()(t, {
1200
1211
  head: o,
1201
- body: l,
1212
+ body: g,
1202
1213
  startY: n.Y,
1203
- margin: { left: h, right: r.page.xmargin },
1214
+ margin: { left: c, right: r.page.xmargin },
1204
1215
  ...a,
1205
1216
  didDrawPage: (s) => {
1206
1217
  a.didDrawPage && a.didDrawPage(s);
@@ -1212,7 +1223,7 @@ const nt = (t, e, i, r) => {
1212
1223
  });
1213
1224
  }
1214
1225
  });
1215
- }, v = {
1226
+ }, D = {
1216
1227
  page: {
1217
1228
  indent: 10,
1218
1229
  maxContentWidth: 190,
@@ -1238,7 +1249,7 @@ const nt = (t, e, i, r) => {
1238
1249
  }, dt = (t) => {
1239
1250
  if (!t)
1240
1251
  throw new Error("RenderOption is required");
1241
- const e = { ...v.page, ...t.page }, i = { ...v.font, ...t.font }, r = { ...v.image, ...t.image };
1252
+ const e = { ...D.page, ...t.page }, i = { ...D.font, ...t.font }, r = { ...D.image, ...t.image };
1242
1253
  return e.maxContentWidth || (e.maxContentWidth = 190), e.maxContentHeight || (e.maxContentHeight = 277), {
1243
1254
  ...t,
1244
1255
  page: e,
@@ -1248,70 +1259,69 @@ const nt = (t, e, i, r) => {
1248
1259
  }, xt = async (t, e, i) => {
1249
1260
  const r = dt(i);
1250
1261
  n.initialize(r);
1251
- const h = await M(e);
1252
- await $(h);
1253
- const o = (l, a = 0, s = !1, g = 0, c = !1, f = !0) => {
1254
- const d = a * r.page.indent;
1255
- switch (l.type) {
1262
+ const c = await K(e);
1263
+ await J(c);
1264
+ const o = (g, a = 0, s = !1, l = 0, p = !1) => {
1265
+ const f = a * r.page.indent;
1266
+ switch (g.type) {
1256
1267
  case u.Heading:
1257
- et(t, l, d, o);
1268
+ tt(t, g, f, o);
1258
1269
  break;
1259
1270
  case u.Paragraph:
1260
- nt(t, l, d, o);
1271
+ et(t, g, f, o);
1261
1272
  break;
1262
1273
  case u.List:
1263
- it(t, l, a, o);
1274
+ nt(t, g, a, o);
1264
1275
  break;
1265
1276
  case u.ListItem:
1266
- st(
1277
+ it(
1267
1278
  t,
1268
- l,
1279
+ g,
1269
1280
  a,
1270
1281
  o,
1271
- g,
1272
- c
1282
+ l,
1283
+ p
1273
1284
  );
1274
1285
  break;
1275
1286
  case u.Hr:
1276
- ot(t);
1287
+ at(t);
1277
1288
  break;
1278
1289
  case u.Code:
1279
- rt(t, l, a);
1290
+ ot(t, g, a);
1280
1291
  break;
1281
1292
  case u.Strong:
1282
1293
  case u.Em:
1283
1294
  case u.CodeSpan:
1284
- lt(t, l, d);
1295
+ rt(t, g, f);
1285
1296
  break;
1286
1297
  case u.Link:
1287
- gt(t, l, d);
1298
+ lt(t, g, f);
1288
1299
  break;
1289
1300
  case u.Blockquote:
1290
- ct(t, l, a, o);
1301
+ gt(t, g, a, o);
1291
1302
  break;
1292
1303
  case u.Image:
1293
- pt(t, l, a);
1304
+ pt(t, g, a);
1294
1305
  break;
1295
1306
  case u.Table:
1296
- ft(t, l, a);
1307
+ ft(t, g, a);
1297
1308
  break;
1298
1309
  case u.Raw:
1299
1310
  case u.Text:
1300
- at(
1311
+ st(
1301
1312
  t,
1302
- l,
1313
+ g,
1303
1314
  a,
1304
1315
  s,
1305
1316
  o,
1306
- g,
1307
- c,
1308
- r.page.defaultFontSize > 0
1309
- // Using validOptions here if needed, or just true for justify
1317
+ l,
1318
+ p,
1319
+ r.content?.textAlignment === "justify"
1310
1320
  );
1311
1321
  break;
1312
1322
  default:
1313
1323
  console.warn(
1314
- `Warning: Unsupported element type encountered: ${l.type}.
1324
+ `Warning: Unsupported element type encountered: ${g.type}.
1315
1325
  If you believe this element type should be supported, please create an issue at:
1316
1326
  https://github.com/JeelGajera/jspdf-md-renderer/issues
1317
1327
  with details of the element and expected behavior. Thanks for helping to improve this library!`
@@ -1319,11 +1329,11 @@ const nt = (t, e, i, r) => {
1319
1329
  break;
1320
1330
  }
1321
1331
  };
1322
- for (const l of h)
1323
- o(l);
1332
+ for (const g of c)
1333
+ o(g);
1324
1334
  r.endCursorYHandler(n.Y);
1325
1335
  };
1326
1336
  export {
1327
- M as MdTextParser,
1337
+ K as MdTextParser,
1328
1338
  xt as MdTextRender
1329
1339
  };