@pdfme/schemas 6.1.13-dev.24 → 6.1.13-dev.26

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.
Files changed (36) hide show
  1. package/dist/{builtins-8En4EIAG.js → builtins-WchxRSf_.js} +135 -80
  2. package/dist/builtins-WchxRSf_.js.map +1 -0
  3. package/dist/builtins.js +1 -1
  4. package/dist/dynamicLayout.js +4 -4
  5. package/dist/{dynamicTemplate-DQF7c6NR.js → dynamicTemplate-CcnCXHfM.js} +2 -2
  6. package/dist/{dynamicTemplate-DQF7c6NR.js.map → dynamicTemplate-CcnCXHfM.js.map} +1 -1
  7. package/dist/{dynamicTemplate-CCCmLMvQ.js → dynamicTemplate-DEwOv_DE.js} +4 -4
  8. package/dist/{dynamicTemplate-CCCmLMvQ.js.map → dynamicTemplate-DEwOv_DE.js.map} +1 -1
  9. package/dist/{dynamicTemplate-CnK0nlnj.js → dynamicTemplate-DkTVIMNr.js} +2 -2
  10. package/dist/{dynamicTemplate-CnK0nlnj.js.map → dynamicTemplate-DkTVIMNr.js.map} +1 -1
  11. package/dist/graphics/orientation.d.ts +31 -0
  12. package/dist/{helper-4iOJns1p.js → helper-BR4_UZA5.js} +2 -2
  13. package/dist/{helper-4iOJns1p.js.map → helper-BR4_UZA5.js.map} +1 -1
  14. package/dist/index.js +216 -81
  15. package/dist/index.js.map +1 -1
  16. package/dist/lists.js +2 -2
  17. package/dist/{measure-BC7tjAtT.js → measure-BarlRI1L.js} +71 -227
  18. package/dist/measure-BarlRI1L.js.map +1 -0
  19. package/dist/splitRange-B6311Noc.js +10854 -0
  20. package/dist/splitRange-B6311Noc.js.map +1 -0
  21. package/dist/tables.js +2 -2
  22. package/dist/text/helper.d.ts +33 -1
  23. package/dist/text/lineBreak.d.ts +69 -0
  24. package/dist/text/lineBreakClasses.generated.d.ts +11 -0
  25. package/dist/text/richText.d.ts +2 -0
  26. package/dist/text/uiRender.d.ts +3 -1
  27. package/dist/text/wrap.d.ts +67 -0
  28. package/dist/texts.js +3 -3
  29. package/dist/{utils-D_sFXK0U.js → utils-CtRFDAnq.js} +2 -2
  30. package/dist/{utils-D_sFXK0U.js.map → utils-CtRFDAnq.js.map} +1 -1
  31. package/dist/utils.js +2 -2
  32. package/package.json +3 -1
  33. package/dist/builtins-8En4EIAG.js.map +0 -1
  34. package/dist/measure-BC7tjAtT.js.map +0 -1
  35. package/dist/splitRange-BHV0vb0Q.js +0 -504
  36. package/dist/splitRange-BHV0vb0Q.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { $ as VERTICAL_ALIGN_MIDDLE, A as ALIGN_RIGHT, B as DYNAMIC_FIT_VERTICAL, C as getBoxInsets, D as ALIGN_CENTER, E as hasBoxDimension, F as DEFAULT_FONT_COLOR, G as PLACEHOLDER_FONT_COLOR, H as FONT_VARIANT_FALLBACK_ERROR, I as DEFAULT_FONT_VARIANT_FALLBACK, J as TEXT_FORMAT_INLINE_MARKDOWN, K as SYNTHETIC_BOLD_CSS_TEXT_SHADOW, L as DEFAULT_TEXT_FORMAT, M as CODE_HORIZONTAL_PADDING, N as DEFAULT_ALIGNMENT, O as ALIGN_JUSTIFY, P as DEFAULT_DYNAMIC_FIT, Q as VERTICAL_ALIGN_BOTTOM, R as DEFAULT_TEXT_OVERFLOW, S as getBoxDimensionPropPanelSchema, U as FONT_VARIANT_FALLBACK_PLAIN, W as FONT_VARIANT_FALLBACK_SYNTHETIC, X as TEXT_OVERFLOW_EXPAND, Y as TEXT_FORMAT_PLAIN, Z as TEXT_OVERFLOW_VISIBLE, _ as isFirefox, b as createBoxDimension, d as calculateDynamicFontSize, f as fetchRemoteFontData, g as heightOfFontAtSize, h as getFontKitFont, j as CODE_BACKGROUND_COLOR, m as getFontDescentInPt, p as getBrowserVerticalFontAdjustments, q as SYNTHETIC_BOLD_OFFSET_RATIO, u as getTextLineRange, v as splitTextToSize, x as getBoxContentArea, y as widthOfTextAtSize, z as DYNAMIC_FIT_HORIZONTAL } from "./splitRange-BHV0vb0Q.js";
2
- import { _ as stripInlineMarkdown, d as isInlineMarkdownTextSchema, f as layoutRichTextLines, g as parseInlineMarkdown, l as calculateDynamicRichTextFontSize, m as resolveRichTextRuns, s as plainTextLinesToValue, t as applyTextLineRange, u as countRichTextLineGraphemes } from "./measure-BC7tjAtT.js";
3
- import { c as HEX_COLOR_PATTERN } from "./dynamicTemplate-CnK0nlnj.js";
4
- import { c as isEditable, i as createSvgStr, n as convertForPdfLayoutProps, o as hex2PrintingColor, u as rotatePoint } from "./utils-D_sFXK0U.js";
1
+ import { $ as TEXT_FORMAT_INLINE_MARKDOWN, B as DEFAULT_DYNAMIC_FIT, C as getLineAlignment, D as getBoxContentArea, E as createBoxDimension, G as DYNAMIC_FIT_HORIZONTAL, H as DEFAULT_FONT_VARIANT_FALLBACK, I as ALIGN_RIGHT, J as FONT_VARIANT_FALLBACK_PLAIN, K as DYNAMIC_FIT_VERTICAL, L as CODE_BACKGROUND_COLOR, M as hasBoxDimension, N as ALIGN_CENTER, O as getBoxDimensionPropPanelSchema, P as ALIGN_JUSTIFY, Q as SYNTHETIC_BOLD_OFFSET_RATIO, R as CODE_HORIZONTAL_PADDING, S as wrapTextToSize, T as splitGraphemes, U as DEFAULT_TEXT_FORMAT, V as DEFAULT_FONT_COLOR, W as DEFAULT_TEXT_OVERFLOW, X as PLACEHOLDER_FONT_COLOR, Y as FONT_VARIANT_FALLBACK_SYNTHETIC, Z as SYNTHETIC_BOLD_CSS_TEXT_SHADOW, b as splitTextToSize, d as calculateDynamicFontSize, et as TEXT_FORMAT_PLAIN, f as fetchRemoteFontData, g as getFontKitFont, h as getFontDescentInPt, it as VERTICAL_ALIGN_MIDDLE, k as getBoxInsets, m as getBrowserVerticalFontAdjustments, nt as TEXT_OVERFLOW_VISIBLE, q as FONT_VARIANT_FALLBACK_ERROR, rt as VERTICAL_ALIGN_BOTTOM, tt as TEXT_OVERFLOW_EXPAND, u as getTextLineRange, v as heightOfFontAtSize, x as widthOfTextAtSize, y as isFirefox, z as DEFAULT_ALIGNMENT } from "./splitRange-B6311Noc.js";
2
+ import { d as layoutRichTextLines, g as stripInlineMarkdown, h as parseInlineMarkdown, l as calculateDynamicRichTextFontSize, p as resolveRichTextRuns, s as plainTextLinesToValue, t as applyTextLineRange, u as isInlineMarkdownTextSchema } from "./measure-BarlRI1L.js";
3
+ import { c as HEX_COLOR_PATTERN } from "./dynamicTemplate-DkTVIMNr.js";
4
+ import { c as isEditable, i as createSvgStr, n as convertForPdfLayoutProps, o as hex2PrintingColor, u as rotatePoint } from "./utils-CtRFDAnq.js";
5
5
  import { DEFAULT_FONT_NAME, getDefaultFont, getFallbackFontName, getInternalLinkTarget, isBlankPdf, mm2pt, normalizeLinkHref, normalizeSafeLinkUri, registerInternalLinkAnnotation } from "@pdfme/common";
6
6
  import { PDFName, PDFString } from "@pdfme/pdf-lib";
7
7
  import { AlignCenter, AlignJustify, AlignLeft, AlignRight, ArrowDownToLine, ArrowUpToLine, Strikethrough, TextCursorInput, Underline } from "lucide";
@@ -206,7 +206,6 @@ var renderInlineMarkdownText = async (arg) => {
206
206
  });
207
207
  const lineRange = getTextLineRange(schema);
208
208
  const lines = applyTextLineRange(allLines, lineRange);
209
- const lineRangeStart = lineRange?.start ?? 0;
210
209
  const pdfFontObj = await embedFontsForRuns(lines.flatMap((line) => line.runs), embedPdfFont);
211
210
  const firstLineTextHeight = heightOfFontAtSize(fontKitFont, fontSize);
212
211
  const descent = getFontDescentInPt(fontKitFont, fontSize);
@@ -220,18 +219,14 @@ var renderInlineMarkdownText = async (arg) => {
220
219
  }
221
220
  lines.forEach((line, rowIndex) => {
222
221
  if (line.runs.length === 0) return;
223
- let textWidth = line.width;
224
- let spacing = characterSpacing;
225
- if (alignment === "justify" && !line.hardBreak && lineRangeStart + rowIndex < allLines.length - 1) {
226
- const graphemeCount = countRichTextLineGraphemes(line);
227
- if (graphemeCount > 0) {
228
- spacing += (width - textWidth) / graphemeCount;
229
- textWidth = width;
230
- }
231
- }
232
- let xLine = x;
233
- if (alignment === "center") xLine += (width - textWidth) / 2;
234
- else if (alignment === "right") xLine += width - textWidth;
222
+ const alignmentMetrics = getLineAlignment({
223
+ text: line.runs.map((run) => run.text).join(""),
224
+ width: line.width,
225
+ hardBreak: line.hardBreak
226
+ }, width, alignment);
227
+ const textWidth = alignmentMetrics.usedWidth;
228
+ const spacing = characterSpacing + alignmentMetrics.extraLetterSpacing;
229
+ const xLine = x + alignmentMetrics.x;
235
230
  const yLine = y + height - yOffset - lineHeight * fontSize * rowIndex;
236
231
  page.pushOperators(pdfLib.setCharacterSpacing(spacing));
237
232
  if (schema.strikethrough || schema.underline) {
@@ -357,11 +352,6 @@ var getFontProp = ({ value, fontKitFont, schema, basePdf, colorType, fontSize: r
357
352
  color
358
353
  };
359
354
  };
360
- var graphemeSegmenter;
361
- var getGraphemeSegmenter = () => {
362
- graphemeSegmenter ?? (graphemeSegmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" }));
363
- return graphemeSegmenter;
364
- };
365
355
  var pdfRender = async (arg) => {
366
356
  const { value, pdfDoc, pdfLib, page, options, schema, basePdf, _cache } = arg;
367
357
  const { font = getDefaultFont(), colorType } = options;
@@ -452,7 +442,7 @@ var pdfRender = async (arg) => {
452
442
  const firstLineTextHeight = heightOfFontAtSize(fontKitFont, fontSize);
453
443
  const descent = getFontDescentInPt(fontKitFont, fontSize);
454
444
  const halfLineHeightAdjustment = lineHeight === 0 ? 0 : (lineHeight - 1) * fontSize / 2;
455
- const lines = applyTextLineRange(splitTextToSize({
445
+ const lines = applyTextLineRange(wrapTextToSize({
456
446
  value,
457
447
  characterSpacing,
458
448
  fontSize,
@@ -469,14 +459,17 @@ var pdfRender = async (arg) => {
469
459
  else if (verticalAlignment === "middle") yOffset = (contentHeight - otherLinesHeight - firstLineTextHeight + descent) / 2 + firstLineTextHeight;
470
460
  }
471
461
  lines.forEach((line, rowIndex) => {
472
- const trimmed = line.replace("\n", "");
462
+ const trimmed = line.text;
473
463
  const textWidth = needsTextWidth ? widthOfTextAtSize(trimmed, fontKitFont, fontSize, characterSpacing) : 0;
474
464
  const textHeight = needsTextHeight ? heightOfFontAtSize(fontKitFont, fontSize) : 0;
475
465
  const rowYOffset = lineHeight * fontSize * rowIndex;
476
- if (line === "") line = "\r\n";
477
- let xLine = contentX;
478
- if (alignment === "center") xLine += (contentWidth - textWidth) / 2;
479
- else if (alignment === "right") xLine += contentWidth - textWidth;
466
+ const alignmentMetrics = getLineAlignment({
467
+ text: trimmed,
468
+ width: textWidth,
469
+ hardBreak: line.hardBreak
470
+ }, contentWidth, alignment);
471
+ const drawText = trimmed === "" ? "\r\n" : trimmed;
472
+ let xLine = contentX + alignmentMetrics.x;
480
473
  let yLine = contentY + contentHeight - yOffset - rowYOffset;
481
474
  if (schema.strikethrough && textWidth > 0) {
482
475
  const _x = xLine + textWidth + 1;
@@ -520,14 +513,8 @@ var pdfRender = async (arg) => {
520
513
  xLine = rotatedPoint.x;
521
514
  yLine = rotatedPoint.y;
522
515
  }
523
- let spacing = characterSpacing;
524
- if (alignment === "justify" && line.slice(-1) !== "\n") {
525
- const iterator = getGraphemeSegmenter().segment(trimmed)[Symbol.iterator]();
526
- const len = Array.from(iterator).length;
527
- spacing += (contentWidth - textWidth) / len;
528
- }
529
- page.pushOperators(pdfLib.setCharacterSpacing(spacing));
530
- page.drawText(trimmed, {
516
+ page.pushOperators(pdfLib.setCharacterSpacing(characterSpacing + alignmentMetrics.extraLetterSpacing));
517
+ page.drawText(drawText, {
531
518
  x: xLine,
532
519
  y: yLine,
533
520
  rotate,
@@ -1042,15 +1029,21 @@ var uiRender = async (arg) => {
1042
1029
  font,
1043
1030
  _cache
1044
1031
  }) : void 0;
1032
+ const resolvedPlainFontSize = !enableInlineMarkdown && enableDynamicFontSize && (usePlaceholder ? placeholder : displayValue) ? calculateDynamicFontSize({
1033
+ textSchema: schema,
1034
+ fontKitFont,
1035
+ value: usePlaceholder ? placeholder : displayValue
1036
+ }) : schema.fontSize ?? 13;
1037
+ const useComputedWrapLines = !editable;
1045
1038
  const textBlock = buildStyledTextContainer(isReadOnlySplitInlineMarkdownFormChunk ? {
1046
1039
  ...arg,
1047
1040
  mode: "viewer"
1048
- } : arg, fontKitFont, usePlaceholder ? placeholder : displayValue, dynamicRichTextFontSize);
1041
+ } : arg, fontKitFont, usePlaceholder ? placeholder : displayValue, dynamicRichTextFontSize ?? resolvedPlainFontSize, { useComputedWrapLines });
1049
1042
  const processedText = replaceUnsupportedChars(getRangedPlainTextValue({
1050
1043
  value,
1051
1044
  schema,
1052
1045
  fontKitFont,
1053
- fontSize: schema.fontSize ?? 13
1046
+ fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize
1054
1047
  }), fontKitFont);
1055
1048
  if (!editable) {
1056
1049
  if (renderInlineMarkdownReadOnlyChunk) {
@@ -1059,14 +1052,26 @@ var uiRender = async (arg) => {
1059
1052
  value,
1060
1053
  schema,
1061
1054
  font,
1062
- _cache
1055
+ _cache,
1056
+ fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize
1063
1057
  });
1064
1058
  return;
1065
1059
  }
1066
- textBlock.innerHTML = processedText.split("").map((l, i) => {
1067
- const escaped = l.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
1068
- return `<span style="letter-spacing:${String(value).length === i + 1 ? 0 : "inherit"};">${escaped}</span>`;
1069
- }).join("");
1060
+ renderReadOnlyPlainLines({
1061
+ textBlock,
1062
+ lines: applyTextLineRange(wrapTextToSize({
1063
+ value,
1064
+ characterSpacing: schema.characterSpacing ?? 0,
1065
+ fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize,
1066
+ fontKitFont,
1067
+ boxWidthInPt: mm2pt(getBoxContentArea(schema).width)
1068
+ }), getTextLineRange(schema)),
1069
+ fontKitFont,
1070
+ fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize,
1071
+ characterSpacing: schema.characterSpacing ?? 0,
1072
+ alignment: schema.alignment ?? "left",
1073
+ boxWidthInPt: mm2pt(getBoxContentArea(schema).width)
1074
+ });
1070
1075
  return;
1071
1076
  }
1072
1077
  makeElementPlainTextContentEditable(textBlock);
@@ -1121,47 +1126,47 @@ var uiRender = async (arg) => {
1121
1126
  });
1122
1127
  };
1123
1128
  var renderInlineMarkdownReadOnly = async (arg) => {
1124
- const { textBlock, value, schema, font, _cache } = arg;
1129
+ const { textBlock, value, schema, font, _cache, fontSize } = arg;
1130
+ const characterSpacing = schema.characterSpacing ?? 0;
1131
+ const alignment = schema.alignment ?? "left";
1132
+ const boxWidthInPt = mm2pt(getBoxContentArea(schema).width);
1125
1133
  const runs = await resolveRichTextRuns({
1126
1134
  runs: parseInlineMarkdown(value),
1127
1135
  schema,
1128
1136
  font,
1129
1137
  _cache
1130
1138
  });
1131
- const lineRange = getTextLineRange(schema);
1132
- if (lineRange) {
1133
- const lines = applyTextLineRange(layoutRichTextLines({
1134
- runs,
1135
- fontSize: schema.fontSize ?? 13,
1136
- characterSpacing: schema.characterSpacing ?? 0,
1137
- boxWidthInPt: mm2pt(getBoxContentArea(schema).width)
1138
- }), lineRange);
1139
- textBlock.innerHTML = "";
1140
- lines.forEach((line, lineIndex) => {
1141
- line.runs.forEach((run) => {
1142
- appendInlineMarkdownRun({
1143
- textBlock,
1144
- run,
1145
- schema,
1146
- font
1147
- });
1148
- });
1149
- if (lineIndex < lines.length - 1) textBlock.appendChild(document.createElement("br"));
1150
- });
1151
- return;
1152
- }
1139
+ const lines = applyTextLineRange(layoutRichTextLines({
1140
+ runs,
1141
+ fontSize,
1142
+ characterSpacing,
1143
+ boxWidthInPt
1144
+ }), getTextLineRange(schema));
1153
1145
  textBlock.innerHTML = "";
1154
- runs.forEach((run) => {
1155
- appendInlineMarkdownRun({
1156
- textBlock,
1157
- run,
1158
- schema,
1159
- font
1146
+ lines.forEach((line, lineIndex) => {
1147
+ const lineEl = document.createElement("span");
1148
+ lineEl.dataset.pdfmeWrapLine = "";
1149
+ lineEl.style.whiteSpace = "pre";
1150
+ const stripTrailingLetterSpacing = applySharedWrapLineSpacing(lineEl, {
1151
+ text: line.runs.map((run) => run.text).join(""),
1152
+ width: line.width,
1153
+ hardBreak: line.hardBreak
1154
+ }, alignment, boxWidthInPt, characterSpacing);
1155
+ line.runs.forEach((run) => {
1156
+ appendInlineMarkdownRun({
1157
+ parent: lineEl,
1158
+ run,
1159
+ schema,
1160
+ font
1161
+ });
1160
1162
  });
1163
+ if (stripTrailingLetterSpacing) stripLineEndLetterSpacing(lineEl);
1164
+ textBlock.appendChild(lineEl);
1165
+ if (lineIndex < lines.length - 1) textBlock.appendChild(document.createTextNode("\n"));
1161
1166
  });
1162
1167
  };
1163
1168
  var appendInlineMarkdownRun = (arg) => {
1164
- const { textBlock, run, schema, font } = arg;
1169
+ const { parent, run, schema, font } = arg;
1165
1170
  const href = run.href ? normalizeLinkHref(run.href) : void 0;
1166
1171
  const span = href ? document.createElement("a") : document.createElement("span");
1167
1172
  const processedText = replaceUnsupportedChars(run.text, run.fontKitFont);
@@ -1187,10 +1192,58 @@ var appendInlineMarkdownRun = (arg) => {
1187
1192
  if (run.code) {
1188
1193
  span.style.backgroundColor = CODE_BACKGROUND_COLOR;
1189
1194
  span.style.borderRadius = "2px";
1190
- span.style.padding = "0 0.15em";
1195
+ span.style.padding = `0 ${CODE_HORIZONTAL_PADDING}pt`;
1191
1196
  if (!schema.fontVariants?.code || !font[schema.fontVariants.code]) span.style.fontFamily = run.fontName ? `'${run.fontName}', monospace` : "monospace";
1192
1197
  }
1193
- textBlock.appendChild(span);
1198
+ parent.appendChild(span);
1199
+ };
1200
+ var applySharedWrapLineSpacing = (lineEl, line, alignment, boxWidthInPt, characterSpacing) => {
1201
+ const { extraLetterSpacing } = getLineAlignment(line, boxWidthInPt, alignment);
1202
+ const stripTrailingLetterSpacing = !(alignment === "justify" && !line.hardBreak);
1203
+ if (!stripTrailingLetterSpacing && extraLetterSpacing !== 0) lineEl.style.letterSpacing = `${characterSpacing + extraLetterSpacing}pt`;
1204
+ return stripTrailingLetterSpacing;
1205
+ };
1206
+ var stripLineEndLetterSpacing = (lineEl) => {
1207
+ let node = lineEl.lastChild;
1208
+ while (node && (node.nodeType !== Node.ELEMENT_NODE || !node.textContent)) node = node.previousSibling;
1209
+ if (!node || node.nodeType !== Node.ELEMENT_NODE) return;
1210
+ const el = node;
1211
+ const graphemes = splitGraphemes(el.textContent ?? "");
1212
+ if (graphemes.length === 0) return;
1213
+ if (graphemes.length === 1) {
1214
+ el.style.letterSpacing = "0";
1215
+ return;
1216
+ }
1217
+ el.textContent = graphemes.slice(0, -1).join("");
1218
+ const tail = document.createElement("span");
1219
+ tail.textContent = graphemes[graphemes.length - 1];
1220
+ tail.style.letterSpacing = "0";
1221
+ el.appendChild(tail);
1222
+ };
1223
+ var renderReadOnlyPlainLines = (arg) => {
1224
+ const { textBlock, lines, fontKitFont, fontSize, characterSpacing, alignment, boxWidthInPt } = arg;
1225
+ textBlock.innerHTML = "";
1226
+ lines.forEach((line, lineIndex) => {
1227
+ const lineEl = document.createElement("span");
1228
+ lineEl.dataset.pdfmeWrapLine = "";
1229
+ lineEl.style.whiteSpace = "pre";
1230
+ const displayText = replaceUnsupportedChars(line.text, fontKitFont);
1231
+ const textWidth = widthOfTextAtSize(line.text, fontKitFont, fontSize, characterSpacing);
1232
+ const stripTrailingLetterSpacing = applySharedWrapLineSpacing(lineEl, {
1233
+ text: line.text,
1234
+ width: textWidth,
1235
+ hardBreak: line.hardBreak
1236
+ }, alignment, boxWidthInPt, characterSpacing);
1237
+ const graphemes = splitGraphemes(displayText);
1238
+ graphemes.forEach((grapheme, index) => {
1239
+ const span = document.createElement("span");
1240
+ span.textContent = grapheme;
1241
+ if (index === graphemes.length - 1 && stripTrailingLetterSpacing) span.style.letterSpacing = "0";
1242
+ lineEl.appendChild(span);
1243
+ });
1244
+ textBlock.appendChild(lineEl);
1245
+ if (lineIndex < lines.length - 1) textBlock.appendChild(document.createTextNode("\n"));
1246
+ });
1194
1247
  };
1195
1248
  var getRangedPlainTextValue = (arg) => {
1196
1249
  const { value, schema, fontKitFont, fontSize } = arg;
@@ -1205,11 +1258,12 @@ var getRangedPlainTextValue = (arg) => {
1205
1258
  }), lineRange);
1206
1259
  return plainTextLinesToValue(lines);
1207
1260
  };
1208
- var buildStyledTextContainer = (arg, fontKitFont, value, resolvedDynamicFontSize) => {
1261
+ var buildStyledTextContainer = (arg, fontKitFont, value, resolvedDynamicFontSize, display) => {
1209
1262
  const { schema, rootElement, mode } = arg;
1210
1263
  let dynamicFontSize = resolvedDynamicFontSize;
1211
1264
  const characterSpacing = schema.characterSpacing ?? 0;
1212
1265
  const editable = isEditable(mode, schema);
1266
+ const useComputedWrapLines = display?.useComputedWrapLines ?? !editable;
1213
1267
  if (dynamicFontSize === void 0 && shouldUseDynamicFontSize(schema, arg.basePdf) && value) dynamicFontSize = calculateDynamicFontSize({
1214
1268
  textSchema: schema,
1215
1269
  fontKitFont,
@@ -1252,15 +1306,16 @@ var buildStyledTextContainer = (arg, fontKitFont, value, resolvedDynamicFontSize
1252
1306
  const textDecorations = [];
1253
1307
  if (schema.strikethrough) textDecorations.push("line-through");
1254
1308
  if (schema.underline) textDecorations.push("underline");
1309
+ const alignment = schema.alignment ?? "left";
1255
1310
  const textBlockStyle = {
1256
1311
  fontFamily: schema.fontName ? `'${schema.fontName}'` : "inherit",
1257
1312
  color: schema.fontColor ? schema.fontColor : DEFAULT_FONT_COLOR,
1258
1313
  fontSize: `${dynamicFontSize ?? schema.fontSize ?? 13}pt`,
1259
1314
  letterSpacing: `${characterSpacing}pt`,
1260
1315
  lineHeight: `${schema.lineHeight ?? 1}em`,
1261
- textAlign: schema.alignment ?? "left",
1262
- whiteSpace: "pre-wrap",
1263
- wordBreak: "break-word",
1316
+ textAlign: useComputedWrapLines && alignment === "justify" ? "left" : alignment,
1317
+ whiteSpace: useComputedWrapLines ? "pre" : "pre-wrap",
1318
+ wordBreak: useComputedWrapLines ? "normal" : "break-word",
1264
1319
  resize: "none",
1265
1320
  border: "none",
1266
1321
  outline: "none",
@@ -1329,4 +1384,4 @@ var builtInPlugins = { Text: textSchema };
1329
1384
  //#endregion
1330
1385
  export { mapVerticalAlignToFlex as a, Formatter as c, makeElementPlainTextContentEditable as i, getExtraFormatterSchema as l, textSchema as n, uiRender as o, buildStyledTextContainer as r, propPanel as s, builtInPlugins as t, pdfRender as u };
1331
1386
 
1332
- //# sourceMappingURL=builtins-8En4EIAG.js.map
1387
+ //# sourceMappingURL=builtins-WchxRSf_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins-WchxRSf_.js","names":[],"sources":["../src/text/linkAnnotation.ts","../src/text/richTextPdfRender.ts","../src/text/overflow.ts","../src/text/pdfRender.ts","../src/text/icons/index.ts","../src/text/extraFormatter.ts","../src/text/propPanel.ts","../src/text/uiRender.ts","../src/text/index.ts","../src/builtins.ts"],"sourcesContent":["import { normalizeSafeLinkUri } from '@pdfme/common';\nimport type { PDFDocument, PDFPage } from '@pdfme/pdf-lib';\nimport { PDFName, PDFString } from '@pdfme/pdf-lib';\n\nexport type LinkAnnotationRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport const addUriLinkAnnotation = (arg: {\n pdfDoc: PDFDocument;\n page: PDFPage;\n uri: string;\n rect: LinkAnnotationRect;\n borderWidth?: number;\n}) => {\n const { pdfDoc, page, uri, rect, borderWidth = 0 } = arg;\n const safeUri = normalizeSafeLinkUri(uri);\n if (!safeUri || rect.width <= 0 || rect.height <= 0) return;\n\n const annotationRef = pdfDoc.context.register(\n pdfDoc.context.obj({\n Type: PDFName.of('Annot'),\n Subtype: PDFName.of('Link'),\n Rect: [rect.x, rect.y, rect.x + rect.width, rect.y + rect.height],\n Border: [0, 0, borderWidth],\n A: {\n Type: PDFName.of('Action'),\n S: PDFName.of('URI'),\n URI: PDFString.of(safeUri),\n },\n }),\n );\n\n page.node.addAnnot(annotationRef);\n};\n","import type { PDFFont, Rotation } from '@pdfme/pdf-lib';\nimport type { ColorType, Font, PDFRenderProps } from '@pdfme/common';\nimport { getInternalLinkTarget, registerInternalLinkAnnotation } from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport {\n CODE_BACKGROUND_COLOR,\n CODE_HORIZONTAL_PADDING,\n SYNTHETIC_BOLD_PDF_EXTRA_DRAWS,\n SYNTHETIC_BOLD_OFFSET_RATIO,\n SYNTHETIC_ITALIC_SKEW_DEGREES,\n VERTICAL_ALIGN_BOTTOM,\n VERTICAL_ALIGN_MIDDLE,\n VERTICAL_ALIGN_TOP,\n} from './constants.js';\nimport { getFontDescentInPt, heightOfFontAtSize, widthOfTextAtSize } from './helper.js';\nimport { addUriLinkAnnotation, type LinkAnnotationRect } from './linkAnnotation.js';\nimport { parseInlineMarkdown } from './inlineMarkdown.js';\nimport { applyTextLineRange } from './measure.js';\nimport { layoutRichTextLines, resolveRichTextRuns, type RichTextLineRun } from './richText.js';\nimport { getLineAlignment } from './wrap.js';\nimport type { TextSchema } from './types.js';\nimport { hex2PrintingColor, rotatePoint } from '../utils.js';\nimport { getTextLineRange } from '../splitRange.js';\n\ntype TextColor = ReturnType<typeof hex2PrintingColor>;\n\nconst getSyntheticBoldWidth = (run: RichTextLineRun, fontSize: number) =>\n run.syntheticBold ? fontSize * SYNTHETIC_BOLD_OFFSET_RATIO * SYNTHETIC_BOLD_PDF_EXTRA_DRAWS : 0;\n\nconst getSyntheticItalicWidth = (run: RichTextLineRun, fontSize: number) =>\n run.syntheticItalic\n ? heightOfFontAtSize(run.fontKitFont, fontSize) *\n Math.tan((SYNTHETIC_ITALIC_SKEW_DEGREES * Math.PI) / 180)\n : 0;\n\nconst getRunWidth = (run: RichTextLineRun, fontSize: number, characterSpacing: number) =>\n widthOfTextAtSize(run.text, run.fontKitFont, fontSize, characterSpacing) +\n getSyntheticBoldWidth(run, fontSize) +\n getSyntheticItalicWidth(run, fontSize) +\n (run.code ? CODE_HORIZONTAL_PADDING * 2 : 0);\n\nconst getPdfFontFromObj = (run: RichTextLineRun, pdfFontObj: Record<string, PDFFont>) => {\n const pdfFont = pdfFontObj[run.fontName];\n if (!pdfFont) {\n throw new Error(`[@pdfme/schemas] Missing embedded font \"${run.fontName}\".`);\n }\n return pdfFont;\n};\n\nconst embedFontsForRuns = async (\n runs: RichTextLineRun[],\n embedPdfFont: (fontName: string) => Promise<PDFFont>,\n) => {\n const fontNames = Array.from(new Set(runs.map((run) => run.fontName)));\n const pdfFonts = await Promise.all(\n fontNames.map(async (fontName) => [fontName, await embedPdfFont(fontName)] as const),\n );\n return Object.fromEntries(pdfFonts);\n};\n\nconst drawDecorationLine = (arg: {\n page: PDFRenderProps<TextSchema>['page'];\n x: number;\n y: number;\n width: number;\n rotate: Rotation;\n pivotPoint: { x: number; y: number };\n fontSize: number;\n color: TextColor;\n opacity: number | undefined;\n}) => {\n const { page, x, y, width, rotate, pivotPoint, fontSize, color, opacity } = arg;\n if (width <= 0) return;\n\n page.drawLine({\n start: rotatePoint({ x, y }, pivotPoint, rotate.angle),\n end: rotatePoint({ x: x + width, y }, pivotPoint, rotate.angle),\n thickness: (1 / 12) * fontSize,\n color,\n opacity,\n });\n};\n\nconst getAxisAlignedRect = (arg: {\n x: number;\n y: number;\n width: number;\n height: number;\n rotate: Rotation;\n pivotPoint: { x: number; y: number };\n}): LinkAnnotationRect => {\n const { x, y, width, height, rotate, pivotPoint } = arg;\n if (rotate.angle === 0) return { x, y, width, height };\n\n const points = [\n { x, y },\n { x: x + width, y },\n { x: x + width, y: y + height },\n { x, y: y + height },\n ].map((point) => rotatePoint(point, pivotPoint, rotate.angle));\n const xs = points.map((point) => point.x);\n const ys = points.map((point) => point.y);\n const minX = Math.min(...xs);\n const minY = Math.min(...ys);\n\n return {\n x: minX,\n y: minY,\n width: Math.max(...xs) - minX,\n height: Math.max(...ys) - minY,\n };\n};\n\nconst getLinkAnnotationRect = (arg: {\n run: RichTextLineRun;\n x: number;\n y: number;\n width: number;\n rotate: Rotation;\n pivotPoint: { x: number; y: number };\n fontSize: number;\n}): LinkAnnotationRect => {\n const { run, x, y, width, rotate, pivotPoint, fontSize } = arg;\n const textHeight = heightOfFontAtSize(run.fontKitFont, fontSize);\n const descent = getFontDescentInPt(run.fontKitFont, fontSize);\n const rectY = y + descent;\n const rectHeight = textHeight - descent;\n\n return getAxisAlignedRect({\n x,\n y: rectY,\n width,\n height: rectHeight,\n rotate,\n pivotPoint,\n });\n};\n\nconst drawRun = (arg: {\n page: PDFRenderProps<TextSchema>['page'];\n pdfLib: PDFRenderProps<TextSchema>['pdfLib'];\n run: RichTextLineRun;\n pdfFont: PDFFont;\n x: number;\n y: number;\n rotate: Rotation;\n pivotPoint: { x: number; y: number };\n fontSize: number;\n lineHeight: number;\n color: TextColor;\n opacity: number | undefined;\n colorType: ColorType;\n characterSpacing: number;\n strikethrough: boolean;\n underline: boolean;\n}) => {\n const {\n page,\n pdfLib,\n run,\n pdfFont,\n x,\n y,\n rotate,\n pivotPoint,\n fontSize,\n lineHeight,\n color,\n opacity,\n colorType,\n characterSpacing,\n strikethrough,\n underline,\n } = arg;\n const runWidth = getRunWidth(run, fontSize, characterSpacing);\n const codePadding = run.code ? CODE_HORIZONTAL_PADDING : 0;\n const textX = x + codePadding;\n const textWidth = runWidth - codePadding * 2;\n const textHeight = heightOfFontAtSize(run.fontKitFont, fontSize);\n\n if (run.code) {\n const bgX = x;\n const bgY = y - textHeight * 0.2;\n const bgPoint =\n rotate.angle === 0\n ? { x: bgX, y: bgY }\n : rotatePoint({ x: bgX, y: bgY }, pivotPoint, rotate.angle);\n page.drawRectangle({\n x: bgPoint.x,\n y: bgPoint.y,\n width: runWidth,\n height: textHeight * 1.2,\n rotate,\n color: hex2PrintingColor(CODE_BACKGROUND_COLOR, colorType),\n opacity,\n });\n }\n\n if (strikethrough && runWidth > 0) {\n drawDecorationLine({\n page,\n x: textX,\n y: y + textHeight / 3,\n width: textWidth,\n rotate,\n pivotPoint,\n fontSize,\n color,\n opacity,\n });\n }\n\n if (underline && runWidth > 0) {\n drawDecorationLine({\n page,\n x: textX,\n y: y - textHeight / 12,\n width: textWidth,\n rotate,\n pivotPoint,\n fontSize,\n color,\n opacity,\n });\n }\n\n const drawAt = (drawX: number) => {\n const point =\n rotate.angle === 0 ? { x: drawX, y } : rotatePoint({ x: drawX, y }, pivotPoint, rotate.angle);\n page.drawText(run.text, {\n x: point.x,\n y: point.y,\n rotate,\n size: fontSize,\n color,\n lineHeight: lineHeight * fontSize,\n font: pdfFont,\n opacity,\n ...(run.syntheticItalic ? { ySkew: pdfLib.degrees(SYNTHETIC_ITALIC_SKEW_DEGREES) } : {}),\n });\n };\n\n drawAt(textX);\n if (run.syntheticBold) {\n const offset = fontSize * SYNTHETIC_BOLD_OFFSET_RATIO;\n for (let i = 1; i <= SYNTHETIC_BOLD_PDF_EXTRA_DRAWS; i++) {\n drawAt(textX + offset * i);\n }\n }\n};\n\nexport const renderInlineMarkdownText = async (arg: {\n value: string;\n schema: TextSchema;\n font: Font;\n embedPdfFont: (fontName: string) => Promise<PDFFont>;\n fontKitFont: FontKitFont;\n pdfDoc: PDFRenderProps<TextSchema>['pdfDoc'];\n page: PDFRenderProps<TextSchema>['page'];\n pdfLib: PDFRenderProps<TextSchema>['pdfLib'];\n _cache: Map<string | number, unknown>;\n colorType: ColorType;\n fontSize: number;\n color: TextColor;\n alignment: string;\n verticalAlignment: string;\n lineHeight: number;\n characterSpacing: number;\n x: number;\n y: number;\n width: number;\n height: number;\n pivotPoint: { x: number; y: number };\n rotate: Rotation;\n opacity: number | undefined;\n}) => {\n const {\n value,\n schema,\n font,\n embedPdfFont,\n fontKitFont,\n pdfDoc,\n page,\n pdfLib,\n _cache,\n colorType,\n fontSize,\n color,\n alignment,\n verticalAlignment,\n lineHeight,\n characterSpacing,\n x,\n y,\n width,\n height,\n pivotPoint,\n rotate,\n opacity,\n } = arg;\n const richTextRuns = parseInlineMarkdown(value);\n const resolvedRuns = await resolveRichTextRuns({ runs: richTextRuns, schema, font, _cache });\n const allLines = layoutRichTextLines({\n runs: resolvedRuns,\n fontSize,\n characterSpacing,\n boxWidthInPt: width,\n });\n const lineRange = getTextLineRange(schema);\n const lines = applyTextLineRange(allLines, lineRange);\n const pdfFontObj = await embedFontsForRuns(\n lines.flatMap((line) => line.runs),\n embedPdfFont,\n );\n\n const firstLineTextHeight = heightOfFontAtSize(fontKitFont, fontSize);\n const descent = getFontDescentInPt(fontKitFont, fontSize);\n const halfLineHeightAdjustment = lineHeight === 0 ? 0 : ((lineHeight - 1) * fontSize) / 2;\n\n let yOffset = 0;\n if (verticalAlignment === VERTICAL_ALIGN_TOP) {\n yOffset = firstLineTextHeight + halfLineHeightAdjustment;\n } else {\n const otherLinesHeight = lineHeight * fontSize * (lines.length - 1);\n\n if (verticalAlignment === VERTICAL_ALIGN_BOTTOM) {\n yOffset = height - otherLinesHeight + descent - halfLineHeightAdjustment;\n } else if (verticalAlignment === VERTICAL_ALIGN_MIDDLE) {\n yOffset =\n (height - otherLinesHeight - firstLineTextHeight + descent) / 2 + firstLineTextHeight;\n }\n }\n\n lines.forEach((line, rowIndex) => {\n if (line.runs.length === 0) return;\n\n const alignmentMetrics = getLineAlignment(\n {\n text: line.runs.map((run) => run.text).join(''),\n width: line.width,\n hardBreak: line.hardBreak,\n },\n width,\n alignment,\n );\n const textWidth = alignmentMetrics.usedWidth;\n const spacing = characterSpacing + alignmentMetrics.extraLetterSpacing;\n const xLine = x + alignmentMetrics.x;\n\n const yLine = y + height - yOffset - lineHeight * fontSize * rowIndex;\n page.pushOperators(pdfLib.setCharacterSpacing(spacing));\n\n if (schema.strikethrough || schema.underline) {\n const textHeight = Math.max(\n ...line.runs.map((run) => heightOfFontAtSize(run.fontKitFont, fontSize)),\n );\n if (schema.strikethrough) {\n drawDecorationLine({\n page,\n x: xLine,\n y: yLine + textHeight / 3,\n width: textWidth,\n rotate,\n pivotPoint,\n fontSize,\n color,\n opacity,\n });\n }\n if (schema.underline) {\n drawDecorationLine({\n page,\n x: xLine,\n y: yLine - textHeight / 12,\n width: textWidth,\n rotate,\n pivotPoint,\n fontSize,\n color,\n opacity,\n });\n }\n }\n\n line.runs.reduce((currentX, run, runIndex) => {\n const runWidth = getRunWidth(run, fontSize, spacing);\n const pdfFont = getPdfFontFromObj(run, pdfFontObj);\n drawRun({\n page,\n pdfLib,\n run,\n pdfFont,\n x: currentX,\n y: yLine,\n rotate,\n pivotPoint,\n fontSize,\n lineHeight,\n color,\n opacity,\n colorType,\n characterSpacing: spacing,\n strikethrough: Boolean(run.strikethrough),\n underline: Boolean(run.href) && !schema.underline,\n });\n if (run.href) {\n const rect = getLinkAnnotationRect({\n run,\n x: currentX,\n y: yLine,\n width: runWidth,\n rotate,\n pivotPoint,\n fontSize,\n });\n const targetName = getInternalLinkTarget(run.href);\n if (targetName) {\n registerInternalLinkAnnotation({ _cache, page, targetName, rect });\n } else {\n addUriLinkAnnotation({ pdfDoc, page, uri: run.href, rect });\n }\n }\n\n return currentX + runWidth + (runIndex === line.runs.length - 1 ? 0 : spacing);\n }, xLine);\n });\n};\n","import { isBlankPdf, type BasePdf } from '@pdfme/common';\nimport { TEXT_OVERFLOW_EXPAND } from './constants.js';\nimport type { TextSchema } from './types.js';\n\nconst TEXT_OVERFLOW_EXPAND_SCHEMA_TYPES = new Set(['text', 'multiVariableText']);\n\ntype TextOverflowSchema = Pick<TextSchema, 'overflow'> & Partial<Pick<TextSchema, 'type'>>;\n\nconst isTextOverflowExpandSchema = (schema: Partial<Pick<TextSchema, 'type'>>) =>\n schema.type === undefined || TEXT_OVERFLOW_EXPAND_SCHEMA_TYPES.has(schema.type);\n\nexport const canUseTextOverflowExpand = (\n schema: Partial<Pick<TextSchema, 'type'>>,\n basePdf?: BasePdf,\n) => !isTextOverflowExpandSchema(schema) || basePdf === undefined || isBlankPdf(basePdf);\n\nexport const isTextOverflowExpand = (schema: TextOverflowSchema, basePdf?: BasePdf) =>\n canUseTextOverflowExpand(schema, basePdf) && schema.overflow === TEXT_OVERFLOW_EXPAND;\n\nexport const shouldUseDynamicFontSize = (\n schema: Pick<TextSchema, 'dynamicFontSize' | 'overflow'> & Partial<Pick<TextSchema, 'type'>>,\n basePdf?: BasePdf,\n) => Boolean(schema.dynamicFontSize) && !isTextOverflowExpand(schema, basePdf);\n","import { PDFFont, PDFDocument } from '@pdfme/pdf-lib';\nimport type { Font as FontKitFont } from 'fontkit';\nimport type { TextSchema } from './types.js';\nimport {\n PDFRenderProps,\n ColorType,\n Font,\n getDefaultFont,\n getFallbackFontName,\n mm2pt,\n} from '@pdfme/common';\nimport {\n VERTICAL_ALIGN_TOP,\n VERTICAL_ALIGN_MIDDLE,\n VERTICAL_ALIGN_BOTTOM,\n DEFAULT_FONT_SIZE,\n DEFAULT_ALIGNMENT,\n DEFAULT_VERTICAL_ALIGNMENT,\n DEFAULT_LINE_HEIGHT,\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_FONT_COLOR,\n} from './constants.js';\nimport {\n calculateDynamicFontSize,\n heightOfFontAtSize,\n getFontDescentInPt,\n getFontKitFont,\n fetchRemoteFontData,\n widthOfTextAtSize,\n wrapTextToSize,\n} from './helper.js';\nimport { getLineAlignment } from './wrap.js';\nimport { stripInlineMarkdown } from './inlineMarkdown.js';\nimport { applyTextLineRange } from './measure.js';\nimport { calculateDynamicRichTextFontSize, isInlineMarkdownTextSchema } from './richText.js';\nimport { renderInlineMarkdownText } from './richTextPdfRender.js';\nimport { shouldUseDynamicFontSize } from './overflow.js';\nimport { convertForPdfLayoutProps, rotatePoint, hex2PrintingColor } from '../utils.js';\nimport { getTextLineRange } from '../splitRange.js';\nimport { getBoxContentArea, getBoxInsets, hasBoxDimension } from '../box.js';\n\ntype PdfFontCache = Record<string, Promise<PDFFont>>;\n\nconst PDF_FONT_CACHE_KEY = 'text-pdf-font-cache';\n\nconst getPdfFontCache = (_cache: Map<string | number, unknown>): PdfFontCache => {\n let pdfFontCache = _cache.get(PDF_FONT_CACHE_KEY) as PdfFontCache | undefined;\n if (!pdfFontCache) {\n pdfFontCache = {};\n _cache.set(PDF_FONT_CACHE_KEY, pdfFontCache);\n }\n\n return pdfFontCache;\n};\n\nconst embedAndGetFont = (arg: {\n pdfDoc: PDFDocument;\n font: Font;\n fontName: string;\n _cache: Map<string | number, unknown>;\n}) => {\n const { pdfDoc, font, fontName, _cache } = arg;\n const pdfFontCache = getPdfFontCache(_cache);\n const cachedFont = pdfFontCache[fontName];\n if (cachedFont) {\n return cachedFont;\n }\n\n const fontValue = font[fontName];\n if (!fontValue) {\n return Promise.reject(new Error(`[@pdfme/schemas] Font \"${fontName}\" is not found.`));\n }\n\n const pdfFontPromise = (async () => {\n let fontData = fontValue.data;\n if (typeof fontData === 'string' && fontData.startsWith('http')) {\n fontData = await fetchRemoteFontData(fontData);\n }\n return pdfDoc.embedFont(fontData, {\n subset: typeof fontValue.subset === 'undefined' ? true : fontValue.subset,\n });\n })();\n\n pdfFontCache[fontName] = pdfFontPromise;\n return pdfFontPromise;\n};\n\nconst getFontProp = ({\n value,\n fontKitFont,\n schema,\n basePdf,\n colorType,\n fontSize: resolvedFontSize,\n}: {\n value: string;\n fontKitFont: FontKitFont;\n colorType?: ColorType;\n schema: TextSchema;\n basePdf: PDFRenderProps<TextSchema>['basePdf'];\n fontSize?: number;\n}) => {\n const fontSize =\n resolvedFontSize ??\n (shouldUseDynamicFontSize(schema, basePdf)\n ? calculateDynamicFontSize({ textSchema: schema, fontKitFont, value })\n : (schema.fontSize ?? DEFAULT_FONT_SIZE));\n const color = hex2PrintingColor(schema.fontColor || DEFAULT_FONT_COLOR, colorType);\n\n return {\n alignment: schema.alignment ?? DEFAULT_ALIGNMENT,\n verticalAlignment: schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT,\n lineHeight: schema.lineHeight ?? DEFAULT_LINE_HEIGHT,\n characterSpacing: schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING,\n fontSize,\n color,\n };\n};\n\nexport const pdfRender = async (arg: PDFRenderProps<TextSchema>) => {\n const { value, pdfDoc, pdfLib, page, options, schema, basePdf, _cache } = arg;\n const { font = getDefaultFont(), colorType } = options;\n\n const pageHeight = page.getHeight();\n const {\n width,\n height,\n rotate,\n position: { x, y },\n opacity,\n } = convertForPdfLayoutProps({ schema, pageHeight, applyRotateTranslate: false });\n\n const pivotPoint = { x: x + width / 2, y: pageHeight - mm2pt(schema.position.y) - height / 2 };\n\n if (!value) return;\n drawTextBoxDecoration({ page, schema, colorType, x, y, width, height, rotate, pivotPoint });\n\n const fontName = schema.fontName ? schema.fontName : getFallbackFontName(font);\n const enableInlineMarkdown = isInlineMarkdownTextSchema(schema);\n const contentArea = getBoxContentArea(schema);\n const contentX = x + mm2pt(contentArea.leftInset);\n const contentY = y + mm2pt(contentArea.bottomInset);\n const contentWidth = mm2pt(contentArea.width);\n const contentHeight = mm2pt(contentArea.height);\n\n const pdfFontValuePromise = enableInlineMarkdown\n ? undefined\n : embedAndGetFont({\n pdfDoc,\n font,\n fontName,\n _cache,\n });\n const fontKitFont = await getFontKitFont(\n schema.fontName,\n font,\n _cache as Map<string, FontKitFont>,\n );\n const displayValue = enableInlineMarkdown ? stripInlineMarkdown(value) : value;\n const dynamicRichTextFontSize =\n enableInlineMarkdown && shouldUseDynamicFontSize(schema, basePdf)\n ? await calculateDynamicRichTextFontSize({ value, schema, font, _cache })\n : undefined;\n const fontProp = getFontProp({\n value: displayValue,\n fontKitFont,\n schema,\n basePdf,\n colorType,\n fontSize: dynamicRichTextFontSize,\n });\n\n const { fontSize, color, alignment, verticalAlignment, lineHeight, characterSpacing } = fontProp;\n\n if (enableInlineMarkdown) {\n await renderInlineMarkdownText({\n value,\n schema,\n font,\n embedPdfFont: (fontName) => embedAndGetFont({ pdfDoc, font, fontName, _cache }),\n fontKitFont,\n pdfDoc,\n page,\n pdfLib,\n _cache,\n colorType,\n fontSize,\n color,\n alignment,\n verticalAlignment,\n lineHeight,\n characterSpacing,\n x: contentX,\n y: contentY,\n width: contentWidth,\n height: contentHeight,\n pivotPoint,\n rotate,\n opacity,\n });\n return;\n }\n if (!pdfFontValuePromise) {\n throw new Error('[@pdfme/schemas] Failed to prepare PDF font for text rendering.');\n }\n const pdfFontValue = await pdfFontValuePromise;\n\n const firstLineTextHeight = heightOfFontAtSize(fontKitFont, fontSize);\n const descent = getFontDescentInPt(fontKitFont, fontSize);\n const halfLineHeightAdjustment = lineHeight === 0 ? 0 : ((lineHeight - 1) * fontSize) / 2;\n\n const lines = applyTextLineRange(\n wrapTextToSize({\n value,\n characterSpacing,\n fontSize,\n fontKitFont,\n boxWidthInPt: contentWidth,\n }),\n getTextLineRange(schema),\n );\n const needsTextWidth = alignment !== 'left' || Boolean(schema.strikethrough || schema.underline);\n const needsTextHeight = Boolean(schema.strikethrough || schema.underline);\n\n // Text lines are rendered from the bottom upwards, we need to adjust the position down\n let yOffset = 0;\n if (verticalAlignment === VERTICAL_ALIGN_TOP) {\n yOffset = firstLineTextHeight + halfLineHeightAdjustment;\n } else {\n const otherLinesHeight = lineHeight * fontSize * (lines.length - 1);\n\n if (verticalAlignment === VERTICAL_ALIGN_BOTTOM) {\n yOffset = contentHeight - otherLinesHeight + descent - halfLineHeightAdjustment;\n } else if (verticalAlignment === VERTICAL_ALIGN_MIDDLE) {\n yOffset =\n (contentHeight - otherLinesHeight - firstLineTextHeight + descent) / 2 +\n firstLineTextHeight;\n }\n }\n\n lines.forEach((line, rowIndex) => {\n const trimmed = line.text;\n const textWidth = needsTextWidth\n ? widthOfTextAtSize(trimmed, fontKitFont, fontSize, characterSpacing)\n : 0;\n const textHeight = needsTextHeight ? heightOfFontAtSize(fontKitFont, fontSize) : 0;\n const rowYOffset = lineHeight * fontSize * rowIndex;\n const alignmentMetrics = getLineAlignment(\n { text: trimmed, width: textWidth, hardBreak: line.hardBreak },\n contentWidth,\n alignment,\n );\n\n // Adobe Acrobat Reader shows an error if `drawText` is called with an empty text\n const drawText = trimmed === '' ? '\\r\\n' : trimmed;\n\n let xLine = contentX + alignmentMetrics.x;\n let yLine = contentY + contentHeight - yOffset - rowYOffset;\n\n // draw strikethrough\n if (schema.strikethrough && textWidth > 0) {\n const _x = xLine + textWidth + 1;\n const _y = yLine + textHeight / 3;\n page.drawLine({\n start: rotatePoint({ x: xLine, y: _y }, pivotPoint, rotate.angle),\n end: rotatePoint({ x: _x, y: _y }, pivotPoint, rotate.angle),\n thickness: (1 / 12) * fontSize,\n color: color,\n opacity,\n });\n }\n\n // draw underline\n if (schema.underline && textWidth > 0) {\n const _x = xLine + textWidth + 1;\n const _y = yLine - textHeight / 12;\n page.drawLine({\n start: rotatePoint({ x: xLine, y: _y }, pivotPoint, rotate.angle),\n end: rotatePoint({ x: _x, y: _y }, pivotPoint, rotate.angle),\n thickness: (1 / 12) * fontSize,\n color: color,\n opacity,\n });\n }\n\n if (rotate.angle !== 0) {\n // As we draw each line individually from different points, we must translate each lines position\n // relative to the UI rotation pivot point. see comments in convertForPdfLayoutProps() for more info.\n const rotatedPoint = rotatePoint({ x: xLine, y: yLine }, pivotPoint, rotate.angle);\n xLine = rotatedPoint.x;\n yLine = rotatedPoint.y;\n }\n\n page.pushOperators(\n pdfLib.setCharacterSpacing(characterSpacing + alignmentMetrics.extraLetterSpacing),\n );\n\n page.drawText(drawText, {\n x: xLine,\n y: yLine,\n rotate,\n size: fontSize,\n color,\n lineHeight: lineHeight * fontSize,\n font: pdfFontValue,\n opacity,\n });\n });\n};\n\nconst drawTextBoxDecoration = (arg: {\n page: PDFRenderProps<TextSchema>['page'];\n schema: TextSchema;\n colorType?: ColorType;\n x: number;\n y: number;\n width: number;\n height: number;\n rotate: ReturnType<typeof convertForPdfLayoutProps>['rotate'];\n pivotPoint: { x: number; y: number };\n}) => {\n const { page, schema, colorType, x, y, width, height, rotate, pivotPoint } = arg;\n const { borderWidth } = getBoxInsets(schema);\n const opacity = schema.opacity ?? 1;\n\n const drawRectangle = (rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n color: NonNullable<ReturnType<typeof hex2PrintingColor>>;\n }) => {\n if (rect.width <= 0 || rect.height <= 0) return;\n const point =\n rotate.angle === 0\n ? { x: rect.x, y: rect.y }\n : rotatePoint({ x: rect.x, y: rect.y }, pivotPoint, rotate.angle);\n page.drawRectangle({\n x: point.x,\n y: point.y,\n width: rect.width,\n height: rect.height,\n rotate,\n color: rect.color,\n opacity,\n });\n };\n\n if (schema.backgroundColor) {\n const color = hex2PrintingColor(schema.backgroundColor, colorType);\n if (color) drawRectangle({ x, y, width, height, color });\n }\n\n if (!schema.borderColor || !hasBoxDimension(schema.borderWidth)) return;\n\n const color = hex2PrintingColor(schema.borderColor, colorType);\n if (!color) return;\n\n const top = mm2pt(borderWidth.top);\n const right = mm2pt(borderWidth.right);\n const bottom = mm2pt(borderWidth.bottom);\n const left = mm2pt(borderWidth.left);\n\n drawRectangle({ x, y: y + height - top, width, height: top, color });\n drawRectangle({ x: x + width - right, y, width: right, height, color });\n drawRectangle({ x, y, width, height: bottom, color });\n drawRectangle({ x, y, width: left, height, color });\n};\n","import {\n Strikethrough,\n Underline,\n AlignLeft,\n AlignCenter,\n AlignRight,\n ArrowUpToLine,\n ArrowDownToLine,\n AlignJustify,\n} from 'lucide';\nimport { createSvgStr } from '../../utils.js';\n\nexport const TextStrikethroughIcon = createSvgStr(Strikethrough);\n\nexport const TextUnderlineIcon = createSvgStr(Underline);\n\nexport const TextAlignLeftIcon = createSvgStr(AlignLeft);\n\nexport const TextAlignCenterIcon = createSvgStr(AlignCenter);\n\nexport const TextAlignRightIcon = createSvgStr(AlignRight);\n\nexport const TextAlignJustifyIcon = createSvgStr(AlignJustify);\n\nexport const TextVerticalAlignTopIcon = createSvgStr(ArrowUpToLine);\n\n// svg icons are material icons from https://www.xicons.org\nexport const TextVerticalAlignMiddleIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 24 24\"><path d=\"M8 19h3v4h2v-4h3l-4-4l-4 4zm8-14h-3V1h-2v4H8l4 4l4-4zM4 11v2h16v-2H4z\" fill=\"currentColor\"></path></svg>`;\n\nexport const TextVerticalAlignBottomIcon = createSvgStr(ArrowDownToLine);\n","// No imports needed from @pdfme/common\nimport {\n TextAlignCenterIcon,\n TextAlignLeftIcon,\n TextAlignRightIcon,\n TextAlignJustifyIcon,\n TextStrikethroughIcon,\n TextUnderlineIcon,\n TextVerticalAlignBottomIcon,\n TextVerticalAlignMiddleIcon,\n TextVerticalAlignTopIcon,\n} from './icons/index.js';\nimport {\n ALIGN_CENTER,\n ALIGN_RIGHT,\n DEFAULT_ALIGNMENT,\n DEFAULT_VERTICAL_ALIGNMENT,\n VERTICAL_ALIGN_BOTTOM,\n VERTICAL_ALIGN_MIDDLE,\n ALIGN_JUSTIFY,\n} from './constants.js';\n\nexport enum Formatter {\n STRIKETHROUGH = 'strikethrough',\n UNDERLINE = 'underline',\n ALIGNMENT = 'alignment',\n VERTICAL_ALIGNMENT = 'verticalAlignment',\n}\n\ninterface GroupButtonBoolean {\n key: Formatter;\n icon: string;\n type: 'boolean';\n}\n\ninterface GroupButtonString {\n key: Formatter;\n icon: string;\n type: 'select';\n value: string;\n}\n\ntype GroupButton = GroupButtonBoolean | GroupButtonString;\n\nexport function getExtraFormatterSchema(i18n: (key: string) => string): {\n title: string;\n widget: string;\n buttons: GroupButton[];\n span: number;\n} {\n const buttons: GroupButton[] = [\n { key: Formatter.STRIKETHROUGH, icon: TextStrikethroughIcon, type: 'boolean' },\n { key: Formatter.UNDERLINE, icon: TextUnderlineIcon, type: 'boolean' },\n { key: Formatter.ALIGNMENT, icon: TextAlignLeftIcon, type: 'select', value: DEFAULT_ALIGNMENT },\n { key: Formatter.ALIGNMENT, icon: TextAlignCenterIcon, type: 'select', value: ALIGN_CENTER },\n { key: Formatter.ALIGNMENT, icon: TextAlignRightIcon, type: 'select', value: ALIGN_RIGHT },\n { key: Formatter.ALIGNMENT, icon: TextAlignJustifyIcon, type: 'select', value: ALIGN_JUSTIFY },\n {\n key: Formatter.VERTICAL_ALIGNMENT,\n icon: TextVerticalAlignTopIcon,\n type: 'select',\n value: DEFAULT_VERTICAL_ALIGNMENT,\n },\n {\n key: Formatter.VERTICAL_ALIGNMENT,\n icon: TextVerticalAlignMiddleIcon,\n type: 'select',\n value: VERTICAL_ALIGN_MIDDLE,\n },\n {\n key: Formatter.VERTICAL_ALIGNMENT,\n icon: TextVerticalAlignBottomIcon,\n type: 'select',\n value: VERTICAL_ALIGN_BOTTOM,\n },\n ];\n return {\n title: i18n('schemas.text.format'),\n widget: 'ButtonGroup',\n buttons,\n span: 24,\n };\n}\n","import {\n DEFAULT_FONT_NAME,\n PropPanel,\n PropPanelWidgetProps,\n PropPanelSchema,\n getFallbackFontName,\n} from '@pdfme/common';\nimport type { TextSchema } from './types.js';\nimport {\n DEFAULT_FONT_SIZE,\n DEFAULT_ALIGNMENT,\n DEFAULT_VERTICAL_ALIGNMENT,\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_LINE_HEIGHT,\n DEFAULT_FONT_COLOR,\n DYNAMIC_FIT_VERTICAL,\n DYNAMIC_FIT_HORIZONTAL,\n DEFAULT_DYNAMIC_FIT,\n DEFAULT_DYNAMIC_MIN_FONT_SIZE,\n DEFAULT_DYNAMIC_MAX_FONT_SIZE,\n DEFAULT_TEXT_FORMAT,\n TEXT_FORMAT_INLINE_MARKDOWN,\n TEXT_FORMAT_PLAIN,\n TEXT_OVERFLOW_EXPAND,\n TEXT_OVERFLOW_VISIBLE,\n DEFAULT_TEXT_OVERFLOW,\n DEFAULT_FONT_VARIANT_FALLBACK,\n FONT_VARIANT_FALLBACK_ERROR,\n FONT_VARIANT_FALLBACK_PLAIN,\n FONT_VARIANT_FALLBACK_SYNTHETIC,\n} from './constants.js';\nimport { DEFAULT_OPACITY, HEX_COLOR_PATTERN } from '../constants.js';\nimport { getExtraFormatterSchema } from './extraFormatter.js';\nimport { canUseTextOverflowExpand, isTextOverflowExpand } from './overflow.js';\nimport { createBoxDimension, getBoxDimensionPropPanelSchema } from '../box.js';\n\nconst UseDynamicFontSize = (props: PropPanelWidgetProps) => {\n const { rootElement, changeSchemas, activeSchema, i18n, basePdf } = props;\n const isExpand = isTextOverflowExpand(activeSchema as unknown as TextSchema, basePdf);\n\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked =\n !isExpand && Boolean((activeSchema as { dynamicFontSize?: unknown })?.dynamicFontSize);\n checkbox.disabled = isExpand;\n checkbox.onchange = (e: Event) => {\n const val = (e.target as HTMLInputElement).checked\n ? {\n min: DEFAULT_DYNAMIC_MIN_FONT_SIZE,\n max: DEFAULT_DYNAMIC_MAX_FONT_SIZE,\n fit: DEFAULT_DYNAMIC_FIT,\n }\n : undefined;\n changeSchemas([{ key: 'dynamicFontSize', value: val, schemaId: activeSchema.id }]);\n };\n const label = document.createElement('label');\n const span = document.createElement('span');\n span.innerText = i18n('schemas.text.dynamicFontSize') || '';\n span.style.cssText = 'margin-left: 0.5rem';\n label.style.cssText = 'display: flex; width: 100%;';\n label.style.opacity = isExpand ? '0.5' : '1';\n label.appendChild(checkbox);\n label.appendChild(span);\n rootElement.appendChild(label);\n};\n\nconst UseInlineMarkdown = (props: PropPanelWidgetProps) => {\n const { rootElement, changeSchemas, activeSchema, i18n } = props;\n\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.checked =\n (activeSchema as { textFormat?: unknown })?.textFormat === TEXT_FORMAT_INLINE_MARKDOWN;\n checkbox.onchange = (e: Event) => {\n const value = (e.target as HTMLInputElement).checked\n ? TEXT_FORMAT_INLINE_MARKDOWN\n : TEXT_FORMAT_PLAIN;\n changeSchemas([{ key: 'textFormat', value, schemaId: activeSchema.id }]);\n };\n const label = document.createElement('label');\n const span = document.createElement('span');\n span.innerText = i18n('schemas.text.inlineMarkdown') || '';\n span.style.cssText = 'margin-left: 0.5rem';\n label.style.cssText = 'display: flex; width: 100%;';\n label.appendChild(checkbox);\n label.appendChild(span);\n rootElement.appendChild(label);\n};\n\nexport const propPanel: PropPanel<TextSchema> = {\n schema: ({ options, activeSchema, i18n, basePdf }) => {\n const font = options.font || { [DEFAULT_FONT_NAME]: { data: '', fallback: true } };\n const fontNames = Object.keys(font);\n const fallbackFontName = getFallbackFontName(font);\n\n const activeTextSchema = activeSchema as unknown as TextSchema;\n const canExpandOverflow = canUseTextOverflowExpand(activeTextSchema, basePdf);\n const isExpand = isTextOverflowExpand(activeTextSchema, basePdf);\n const enableDynamicFont =\n !isExpand && Boolean((activeSchema as { dynamicFontSize?: unknown })?.dynamicFontSize);\n const hideTextFormat = activeTextSchema.type === 'text' && activeTextSchema.readOnly !== true;\n const enableInlineMarkdown =\n activeTextSchema.textFormat === TEXT_FORMAT_INLINE_MARKDOWN && !hideTextFormat;\n const baseFontName =\n activeTextSchema.fontName && font[activeTextSchema.fontName]\n ? activeTextSchema.fontName\n : fallbackFontName;\n const optionalFontNames = [\n { label: baseFontName, value: '' },\n ...fontNames\n .filter((name) => name !== baseFontName)\n .map((name) => ({ label: name, value: name })),\n ];\n const overflowOptions = [\n { label: i18n('schemas.text.overflowVisible'), value: TEXT_OVERFLOW_VISIBLE },\n ...(canExpandOverflow\n ? [{ label: i18n('schemas.text.overflowExpand'), value: TEXT_OVERFLOW_EXPAND }]\n : []),\n ];\n\n const textSchema: Record<string, PropPanelSchema> = {\n fontName: {\n title: i18n('schemas.text.fontName'),\n type: 'string',\n widget: 'select',\n default: fallbackFontName,\n placeholder: fallbackFontName,\n props: { options: fontNames.map((name) => ({ label: name, value: name })) },\n span: 12,\n },\n fontSize: {\n title: i18n('schemas.text.size'),\n type: 'number',\n widget: 'inputNumber',\n span: 6,\n disabled: enableDynamicFont,\n props: { min: 0 },\n },\n characterSpacing: {\n title: i18n('schemas.text.spacing'),\n type: 'number',\n widget: 'inputNumber',\n span: 6,\n props: { min: 0 },\n },\n formatter: getExtraFormatterSchema(i18n),\n lineHeight: {\n title: i18n('schemas.text.lineHeight'),\n type: 'number',\n widget: 'inputNumber',\n props: { step: 0.1, min: 0 },\n span: 8,\n },\n overflow: {\n title: i18n('schemas.text.overflow'),\n type: 'string',\n widget: 'select',\n default: DEFAULT_TEXT_OVERFLOW,\n props: {\n options: overflowOptions,\n },\n span: 8,\n },\n useDynamicFontSize: { type: 'boolean', widget: 'UseDynamicFontSize', bind: false, span: 16 },\n dynamicFontSize: {\n type: 'object',\n widget: 'card',\n column: 3,\n properties: {\n min: {\n title: i18n('schemas.text.min'),\n type: 'number',\n widget: 'inputNumber',\n hidden: !enableDynamicFont,\n props: { min: 0 },\n },\n max: {\n title: i18n('schemas.text.max'),\n type: 'number',\n widget: 'inputNumber',\n hidden: !enableDynamicFont,\n props: { min: 0 },\n },\n fit: {\n title: i18n('schemas.text.fit'),\n type: 'string',\n widget: 'select',\n hidden: !enableDynamicFont,\n props: {\n options: [\n { label: i18n('schemas.horizontal'), value: DYNAMIC_FIT_HORIZONTAL },\n { label: i18n('schemas.vertical'), value: DYNAMIC_FIT_VERTICAL },\n ],\n },\n },\n },\n },\n fontColor: {\n title: i18n('schemas.textColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [\n {\n pattern: HEX_COLOR_PATTERN,\n message: i18n('validation.hexColor'),\n },\n ],\n },\n backgroundColor: {\n title: i18n('schemas.bgColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [\n {\n pattern: HEX_COLOR_PATTERN,\n message: i18n('validation.hexColor'),\n },\n ],\n },\n borderColor: {\n title: i18n('schemas.borderColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [\n {\n pattern: HEX_COLOR_PATTERN,\n message: i18n('validation.hexColor'),\n },\n ],\n },\n borderWidth: {\n title: i18n('schemas.borderWidth'),\n type: 'object',\n widget: 'lineTitle',\n span: 24,\n properties: getBoxDimensionPropPanelSchema(0.1),\n },\n padding: {\n title: i18n('schemas.padding'),\n type: 'object',\n widget: 'lineTitle',\n span: 24,\n properties: getBoxDimensionPropPanelSchema(),\n },\n useInlineMarkdown: {\n type: 'boolean',\n widget: 'UseInlineMarkdown',\n bind: false,\n hidden: hideTextFormat,\n span: enableInlineMarkdown ? 12 : 24,\n },\n fontVariantFallback: {\n title: i18n('schemas.text.variantFallback'),\n type: 'string',\n widget: 'select',\n default: DEFAULT_FONT_VARIANT_FALLBACK,\n hidden: !enableInlineMarkdown,\n props: {\n options: [\n { label: i18n('schemas.text.synthetic'), value: FONT_VARIANT_FALLBACK_SYNTHETIC },\n { label: i18n('schemas.text.plain'), value: FONT_VARIANT_FALLBACK_PLAIN },\n { label: i18n('schemas.text.error'), value: FONT_VARIANT_FALLBACK_ERROR },\n ],\n },\n span: 12,\n },\n fontVariants: {\n title: i18n('schemas.text.markdownFonts'),\n type: 'object',\n widget: 'card',\n column: 2,\n hidden: !enableInlineMarkdown,\n properties: {\n bold: {\n title: i18n('schemas.text.boldFont'),\n type: 'string',\n widget: 'select',\n props: { options: optionalFontNames },\n },\n italic: {\n title: i18n('schemas.text.italicFont'),\n type: 'string',\n widget: 'select',\n props: { options: optionalFontNames },\n },\n boldItalic: {\n title: i18n('schemas.text.boldItalicFont'),\n type: 'string',\n widget: 'select',\n props: { options: optionalFontNames },\n },\n code: {\n title: i18n('schemas.text.codeFont'),\n type: 'string',\n widget: 'select',\n props: { options: optionalFontNames },\n },\n },\n },\n };\n\n return textSchema;\n },\n widgets: { UseDynamicFontSize, UseInlineMarkdown },\n defaultSchema: {\n name: '',\n type: 'text',\n content: 'Type Something...',\n position: { x: 0, y: 0 },\n width: 45,\n height: 10,\n // If the value of \"rotate\" is set to undefined or not set at all, rotation will be disabled in the UI.\n // Check this document: https://pdfme.com//docs/custom-schemas#learning-how-to-create-from-pdfmeschemas-code\n rotate: 0,\n alignment: DEFAULT_ALIGNMENT,\n verticalAlignment: DEFAULT_VERTICAL_ALIGNMENT,\n fontSize: DEFAULT_FONT_SIZE,\n textFormat: DEFAULT_TEXT_FORMAT,\n overflow: DEFAULT_TEXT_OVERFLOW,\n fontVariantFallback: DEFAULT_FONT_VARIANT_FALLBACK,\n lineHeight: DEFAULT_LINE_HEIGHT,\n characterSpacing: DEFAULT_CHARACTER_SPACING,\n dynamicFontSize: undefined,\n fontColor: DEFAULT_FONT_COLOR,\n fontName: undefined,\n backgroundColor: '',\n borderColor: '#000000',\n borderWidth: createBoxDimension(0),\n padding: createBoxDimension(0),\n opacity: DEFAULT_OPACITY,\n strikethrough: false,\n underline: false,\n },\n};\n","import type * as CSS from 'csstype';\nimport type { Font as FontKitFont } from 'fontkit';\nimport {\n UIRenderProps,\n getDefaultFont,\n getInternalLinkTarget,\n mm2pt,\n normalizeLinkHref,\n} from '@pdfme/common';\nimport type { TextSchema } from './types.js';\nimport {\n DEFAULT_FONT_SIZE,\n DEFAULT_ALIGNMENT,\n VERTICAL_ALIGN_TOP,\n VERTICAL_ALIGN_MIDDLE,\n VERTICAL_ALIGN_BOTTOM,\n DEFAULT_VERTICAL_ALIGNMENT,\n DEFAULT_LINE_HEIGHT,\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_FONT_COLOR,\n PLACEHOLDER_FONT_COLOR,\n CODE_BACKGROUND_COLOR,\n CODE_HORIZONTAL_PADDING,\n SYNTHETIC_BOLD_CSS_TEXT_SHADOW,\n TEXT_FORMAT_INLINE_MARKDOWN,\n ALIGN_JUSTIFY,\n} from './constants.js';\nimport {\n calculateDynamicFontSize,\n getFontKitFont,\n getBrowserVerticalFontAdjustments,\n isFirefox,\n splitTextToSize,\n wrapTextToSize,\n widthOfTextAtSize,\n} from './helper.js';\nimport { getLineAlignment, splitGraphemes, type WrapLine } from './wrap.js';\nimport { parseInlineMarkdown, stripInlineMarkdown } from './inlineMarkdown.js';\nimport { applyTextLineRange, plainTextLinesToValue } from './measure.js';\nimport { shouldUseDynamicFontSize } from './overflow.js';\nimport {\n calculateDynamicRichTextFontSize,\n isInlineMarkdownTextSchema,\n layoutRichTextLines,\n resolveRichTextRuns,\n} from './richText.js';\nimport { isEditable } from '../utils.js';\nimport { getTextLineRange } from '../splitRange.js';\nimport { getBoxContentArea, getBoxInsets, hasBoxDimension } from '../box.js';\n\nconst replaceUnsupportedChars = (text: string, fontKitFont: FontKitFont): string => {\n const charSupportCache: { [char: string]: boolean } = {};\n\n const isCharSupported = (char: string): boolean => {\n if (char in charSupportCache) {\n return charSupportCache[char];\n }\n const isSupported = fontKitFont.hasGlyphForCodePoint(char.codePointAt(0) || 0);\n charSupportCache[char] = isSupported;\n return isSupported;\n };\n\n const segments = text.split(/(\\r\\n|\\n|\\r)/);\n\n return segments\n .map((segment) => {\n if (/\\r\\n|\\n|\\r/.test(segment)) {\n return segment;\n }\n\n return Array.from(segment)\n .map((char) => {\n if (/\\s/.test(char) || char.charCodeAt(0) < 32) {\n return char;\n }\n\n return isCharSupported(char) ? char : '〿';\n })\n .join('');\n })\n .join('');\n};\n\nexport const uiRender = async (arg: UIRenderProps<TextSchema>) => {\n const {\n value,\n schema,\n basePdf,\n mode,\n onChange,\n stopEditing,\n tabIndex,\n placeholder,\n options,\n _cache,\n } = arg;\n const hasInlineMarkdownFormat = schema.textFormat === TEXT_FORMAT_INLINE_MARKDOWN;\n const enableInlineMarkdown = isInlineMarkdownTextSchema(schema);\n const isReadOnlySplitInlineMarkdownFormChunk =\n mode === 'form' && Boolean(getTextLineRange(schema)) && hasInlineMarkdownFormat;\n const renderInlineMarkdownReadOnlyChunk =\n enableInlineMarkdown || isReadOnlySplitInlineMarkdownFormChunk;\n const editable = isEditable(mode, schema) && !isReadOnlySplitInlineMarkdownFormChunk;\n const usePlaceholder = editable && placeholder && !value;\n const getText = (element: HTMLDivElement) => {\n let text = element.innerText;\n if (text.endsWith('\\n')) {\n // contenteditable adds additional newline char retrieved with innerText\n text = text.slice(0, -1);\n }\n return text;\n };\n const font = options?.font || getDefaultFont();\n const fontKitFont = await getFontKitFont(\n schema.fontName,\n font,\n _cache as Map<string, import('fontkit').Font>,\n );\n const enableDynamicFontSize = shouldUseDynamicFontSize(schema, basePdf);\n const displayValue = enableInlineMarkdown ? stripInlineMarkdown(value) : value;\n const dynamicRichTextFontSize =\n enableInlineMarkdown && enableDynamicFontSize\n ? await calculateDynamicRichTextFontSize({\n value: usePlaceholder ? (placeholder as string) : value,\n schema,\n font,\n _cache,\n })\n : undefined;\n const resolvedPlainFontSize =\n !enableInlineMarkdown && enableDynamicFontSize && (usePlaceholder ? placeholder : displayValue)\n ? calculateDynamicFontSize({\n textSchema: schema,\n fontKitFont,\n value: usePlaceholder ? (placeholder as string) : displayValue,\n })\n : (schema.fontSize ?? DEFAULT_FONT_SIZE);\n const useComputedWrapLines = !editable;\n const textBlock = buildStyledTextContainer(\n isReadOnlySplitInlineMarkdownFormChunk ? { ...arg, mode: 'viewer' } : arg,\n fontKitFont,\n usePlaceholder ? placeholder : displayValue,\n dynamicRichTextFontSize ?? resolvedPlainFontSize,\n { useComputedWrapLines },\n );\n\n const processedText = replaceUnsupportedChars(\n getRangedPlainTextValue({\n value,\n schema,\n fontKitFont,\n fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize,\n }),\n fontKitFont,\n );\n\n if (!editable) {\n if (renderInlineMarkdownReadOnlyChunk) {\n await renderInlineMarkdownReadOnly({\n textBlock,\n value,\n schema,\n font,\n _cache,\n fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize,\n });\n return;\n }\n\n renderReadOnlyPlainLines({\n textBlock,\n lines: applyTextLineRange(\n wrapTextToSize({\n value,\n characterSpacing: schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING,\n fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize,\n fontKitFont,\n boxWidthInPt: mm2pt(getBoxContentArea(schema).width),\n }),\n getTextLineRange(schema),\n ),\n fontKitFont,\n fontSize: dynamicRichTextFontSize ?? resolvedPlainFontSize,\n characterSpacing: schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING,\n alignment: schema.alignment ?? DEFAULT_ALIGNMENT,\n boxWidthInPt: mm2pt(getBoxContentArea(schema).width),\n });\n return;\n }\n\n makeElementPlainTextContentEditable(textBlock);\n textBlock.tabIndex = tabIndex || 0;\n textBlock.innerText = mode === 'designer' ? value : processedText;\n textBlock.addEventListener('blur', (e: Event) => {\n if (onChange) onChange({ key: 'content', value: getText(e.target as HTMLDivElement) });\n if (stopEditing) stopEditing();\n });\n\n if (enableDynamicFontSize) {\n let dynamicFontSize: undefined | number = undefined;\n\n textBlock.addEventListener('keyup', () => {\n setTimeout(() => {\n // Use a regular function instead of an async one since we don't need await\n (() => {\n if (!textBlock.textContent) return;\n dynamicFontSize = calculateDynamicFontSize({\n textSchema: schema,\n fontKitFont,\n value: isInlineMarkdownTextSchema(schema)\n ? stripInlineMarkdown(getText(textBlock))\n : getText(textBlock),\n startingFontSize: dynamicFontSize,\n });\n textBlock.style.fontSize = `${dynamicFontSize}pt`;\n\n const { topAdj: newTopAdj, bottomAdj: newBottomAdj } = getBrowserVerticalFontAdjustments(\n fontKitFont,\n dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE,\n schema.lineHeight ?? DEFAULT_LINE_HEIGHT,\n schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT,\n );\n textBlock.style.paddingTop = `${newTopAdj}px`;\n textBlock.style.marginBottom = `${newBottomAdj}px`;\n })();\n }, 0);\n });\n }\n\n if (usePlaceholder) {\n textBlock.style.color = PLACEHOLDER_FONT_COLOR;\n textBlock.addEventListener('focus', () => {\n if (textBlock.innerText === placeholder) {\n textBlock.innerText = '';\n textBlock.style.color = schema.fontColor ?? DEFAULT_FONT_COLOR;\n }\n });\n }\n\n if (mode === 'designer') {\n setTimeout(() => {\n textBlock.focus();\n // Set the focus to the end of the editable element when you focus, as we would for a textarea\n const selection = window.getSelection();\n const range = document.createRange();\n if (selection && range) {\n range.selectNodeContents(textBlock);\n range.collapse(false); // Collapse range to the end\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n });\n }\n};\n\nconst renderInlineMarkdownReadOnly = async (arg: {\n textBlock: HTMLDivElement;\n value: string;\n schema: TextSchema;\n font: NonNullable<UIRenderProps<TextSchema>['options']['font']>;\n _cache: Map<string | number, unknown>;\n fontSize: number;\n}) => {\n const { textBlock, value, schema, font, _cache, fontSize } = arg;\n const characterSpacing = schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const alignment = schema.alignment ?? DEFAULT_ALIGNMENT;\n const boxWidthInPt = mm2pt(getBoxContentArea(schema).width);\n const runs = await resolveRichTextRuns({\n runs: parseInlineMarkdown(value),\n schema,\n font,\n _cache,\n });\n const lines = applyTextLineRange(\n layoutRichTextLines({\n runs,\n fontSize,\n characterSpacing,\n boxWidthInPt,\n }),\n getTextLineRange(schema),\n );\n\n textBlock.innerHTML = '';\n lines.forEach((line, lineIndex) => {\n const lineEl = document.createElement('span');\n lineEl.dataset.pdfmeWrapLine = '';\n lineEl.style.whiteSpace = 'pre';\n const stripTrailingLetterSpacing = applySharedWrapLineSpacing(\n lineEl,\n {\n text: line.runs.map((run) => run.text).join(''),\n width: line.width,\n hardBreak: line.hardBreak,\n },\n alignment,\n boxWidthInPt,\n characterSpacing,\n );\n\n line.runs.forEach((run) => {\n appendInlineMarkdownRun({ parent: lineEl, run, schema, font });\n });\n if (stripTrailingLetterSpacing) {\n stripLineEndLetterSpacing(lineEl);\n }\n\n textBlock.appendChild(lineEl);\n if (lineIndex < lines.length - 1) {\n textBlock.appendChild(document.createTextNode('\\n'));\n }\n });\n};\n\nconst appendInlineMarkdownRun = (arg: {\n parent: HTMLElement;\n run: Awaited<ReturnType<typeof resolveRichTextRuns>>[number];\n schema: TextSchema;\n font: NonNullable<UIRenderProps<TextSchema>['options']['font']>;\n}) => {\n const { parent, run, schema, font } = arg;\n const href = run.href ? normalizeLinkHref(run.href) : undefined;\n const span = href ? document.createElement('a') : document.createElement('span');\n const processedText = replaceUnsupportedChars(run.text, run.fontKitFont);\n const textDecorations: string[] = [];\n\n span.textContent = processedText;\n if (href) {\n const anchor = span as HTMLAnchorElement;\n anchor.href = href;\n if (!getInternalLinkTarget(href)) {\n anchor.target = '_blank';\n anchor.rel = 'noopener noreferrer';\n }\n textDecorations.push('underline');\n }\n if (run.fontName) {\n span.style.fontFamily = `'${run.fontName}'`;\n }\n if (run.syntheticBold) {\n span.style.fontWeight = '800';\n span.style.textShadow = SYNTHETIC_BOLD_CSS_TEXT_SHADOW;\n }\n if (run.syntheticItalic) {\n span.style.fontStyle = 'italic';\n }\n if (run.strikethrough) {\n textDecorations.push('line-through');\n }\n if (textDecorations.length > 0) {\n span.style.textDecoration = textDecorations.join(' ');\n }\n if (run.code) {\n span.style.backgroundColor = CODE_BACKGROUND_COLOR;\n span.style.borderRadius = '2px';\n span.style.padding = `0 ${CODE_HORIZONTAL_PADDING}pt`;\n if (!schema.fontVariants?.code || !font[schema.fontVariants.code]) {\n span.style.fontFamily = run.fontName ? `'${run.fontName}', monospace` : 'monospace';\n }\n }\n parent.appendChild(span);\n};\n\nconst applySharedWrapLineSpacing = (\n lineEl: HTMLElement,\n line: { text: string; width: number; hardBreak: boolean },\n alignment: string,\n boxWidthInPt: number,\n characterSpacing: number,\n) => {\n const { extraLetterSpacing } = getLineAlignment(line, boxWidthInPt, alignment);\n const stripTrailingLetterSpacing = !(alignment === ALIGN_JUSTIFY && !line.hardBreak);\n if (!stripTrailingLetterSpacing && extraLetterSpacing !== 0) {\n lineEl.style.letterSpacing = `${characterSpacing + extraLetterSpacing}pt`;\n }\n return stripTrailingLetterSpacing;\n};\n\nconst stripLineEndLetterSpacing = (lineEl: HTMLElement) => {\n let node: ChildNode | null = lineEl.lastChild;\n while (node && (node.nodeType !== Node.ELEMENT_NODE || !node.textContent)) {\n node = node.previousSibling;\n }\n if (!node || node.nodeType !== Node.ELEMENT_NODE) return;\n\n const el = node as HTMLElement;\n const graphemes = splitGraphemes(el.textContent ?? '');\n if (graphemes.length === 0) return;\n if (graphemes.length === 1) {\n el.style.letterSpacing = '0';\n return;\n }\n\n el.textContent = graphemes.slice(0, -1).join('');\n const tail = document.createElement('span');\n tail.textContent = graphemes[graphemes.length - 1];\n tail.style.letterSpacing = '0';\n el.appendChild(tail);\n};\n\nconst renderReadOnlyPlainLines = (arg: {\n textBlock: HTMLDivElement;\n lines: WrapLine[];\n fontKitFont: FontKitFont;\n fontSize: number;\n characterSpacing: number;\n alignment: string;\n boxWidthInPt: number;\n}) => {\n const { textBlock, lines, fontKitFont, fontSize, characterSpacing, alignment, boxWidthInPt } =\n arg;\n textBlock.innerHTML = '';\n\n lines.forEach((line, lineIndex) => {\n const lineEl = document.createElement('span');\n lineEl.dataset.pdfmeWrapLine = '';\n lineEl.style.whiteSpace = 'pre';\n const displayText = replaceUnsupportedChars(line.text, fontKitFont);\n\n const textWidth = widthOfTextAtSize(line.text, fontKitFont, fontSize, characterSpacing);\n const stripTrailingLetterSpacing = applySharedWrapLineSpacing(\n lineEl,\n { text: line.text, width: textWidth, hardBreak: line.hardBreak },\n alignment,\n boxWidthInPt,\n characterSpacing,\n );\n\n const graphemes = splitGraphemes(displayText);\n graphemes.forEach((grapheme, index) => {\n const span = document.createElement('span');\n span.textContent = grapheme;\n // PDF `setCharacterSpacing` applies Tc after every grapheme, including\n // the last. Zeroing the last glyph is only for ordinary characterSpacing\n // so browsers do not count a trailing gap when wrapping.\n if (index === graphemes.length - 1 && stripTrailingLetterSpacing) {\n span.style.letterSpacing = '0';\n }\n lineEl.appendChild(span);\n });\n\n textBlock.appendChild(lineEl);\n // Join with a real newline so `pre` paints one visual line per wrap line\n // and `textContent` keeps paragraph breaks. Do not suffix facade `\\n`\n // characters — that would add an extra blank line after each paragraph.\n if (lineIndex < lines.length - 1) {\n textBlock.appendChild(document.createTextNode('\\n'));\n }\n });\n};\n\nconst getRangedPlainTextValue = (arg: {\n value: string;\n schema: TextSchema;\n fontKitFont: FontKitFont;\n fontSize: number;\n}) => {\n const { value, schema, fontKitFont, fontSize } = arg;\n const lineRange = getTextLineRange(schema);\n if (!lineRange) return value;\n\n const lines = applyTextLineRange(\n splitTextToSize({\n value,\n characterSpacing: schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING,\n fontSize,\n fontKitFont,\n boxWidthInPt: mm2pt(getBoxContentArea(schema).width),\n }),\n lineRange,\n );\n return plainTextLinesToValue(lines);\n};\n\nexport const buildStyledTextContainer = (\n arg: UIRenderProps<TextSchema>,\n fontKitFont: FontKitFont,\n value: string,\n resolvedDynamicFontSize?: number,\n display?: { useComputedWrapLines?: boolean },\n) => {\n const { schema, rootElement, mode } = arg;\n\n let dynamicFontSize: undefined | number = resolvedDynamicFontSize;\n const characterSpacing = schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const editable = isEditable(mode, schema);\n // `pre` + left-for-justify is for read-only displays whose wrap-engine\n // lines are already computed (plain text and inline Markdown). Live Form /\n // Designer editing keeps `pre-wrap` so caret / IME stay native.\n const useComputedWrapLines = display?.useComputedWrapLines ?? !editable;\n\n if (dynamicFontSize === undefined && shouldUseDynamicFontSize(schema, arg.basePdf) && value) {\n dynamicFontSize = calculateDynamicFontSize({\n textSchema: schema,\n fontKitFont,\n value,\n startingFontSize: dynamicFontSize,\n });\n }\n\n // Depending on vertical alignment, we need to move the top or bottom of the font to keep\n // it within it's defined box and align it with the generated pdf.\n const { topAdj, bottomAdj } = getBrowserVerticalFontAdjustments(\n fontKitFont,\n dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE,\n schema.lineHeight ?? DEFAULT_LINE_HEIGHT,\n schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT,\n );\n\n const topAdjustment = topAdj.toString();\n const bottomAdjustment = bottomAdj.toString();\n const verticalAlignment = schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT;\n const isTopAligned = verticalAlignment === VERTICAL_ALIGN_TOP;\n\n const container = document.createElement('div');\n const { borderWidth, padding } = getBoxInsets(schema);\n const hasPadding = hasBoxDimension(schema.padding);\n const hasBorder = Boolean(schema.borderColor && hasBoxDimension(schema.borderWidth));\n\n const containerStyle: CSS.Properties = {\n padding: hasPadding\n ? `${padding.top}mm ${padding.right}mm ${padding.bottom}mm ${padding.left}mm`\n : 0,\n resize: 'none',\n backgroundColor: getBackgroundColor(schema),\n border: hasBorder ? undefined : 'none',\n ...(hasBorder\n ? {\n borderTopWidth: `${borderWidth.top}mm`,\n borderRightWidth: `${borderWidth.right}mm`,\n borderBottomWidth: `${borderWidth.bottom}mm`,\n borderLeftWidth: `${borderWidth.left}mm`,\n borderStyle: 'solid',\n borderColor: schema.borderColor,\n }\n : {}),\n ...(hasPadding || hasBorder ? { boxSizing: 'border-box' } : {}),\n display: 'flex',\n flexDirection: 'column',\n justifyContent: mapVerticalAlignToFlex(verticalAlignment),\n width: '100%',\n height: '100%',\n cursor: editable ? 'text' : 'default',\n };\n Object.assign(container.style, containerStyle);\n rootElement.innerHTML = '';\n rootElement.appendChild(container);\n\n // text decoration\n const textDecorations = [];\n if (schema.strikethrough) textDecorations.push('line-through');\n if (schema.underline) textDecorations.push('underline');\n\n const alignment = schema.alignment ?? DEFAULT_ALIGNMENT;\n const textBlockStyle: CSS.Properties = {\n // Font formatting styles\n fontFamily: schema.fontName ? `'${schema.fontName}'` : 'inherit',\n color: schema.fontColor ? schema.fontColor : DEFAULT_FONT_COLOR,\n fontSize: `${dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE}pt`,\n letterSpacing: `${characterSpacing}pt`,\n lineHeight: `${schema.lineHeight ?? DEFAULT_LINE_HEIGHT}em`,\n // Read-only Viewer paints wrap-engine lines with `pre`. CSS justify would\n // fight the PDF grapheme-count letter-spacing applied per soft line.\n textAlign: useComputedWrapLines && alignment === ALIGN_JUSTIFY ? 'left' : alignment,\n whiteSpace: useComputedWrapLines ? 'pre' : 'pre-wrap',\n wordBreak: useComputedWrapLines ? 'normal' : 'break-word',\n // Block layout styles\n resize: 'none',\n border: 'none',\n outline: 'none',\n marginBottom: `${bottomAdjustment}px`,\n paddingTop: `${topAdjustment}px`,\n backgroundColor: 'transparent',\n textDecoration: textDecorations.join(' '),\n // Browsers include the final letter-spacing in editable text wrapping, unlike PDF rendering.\n ...(editable && characterSpacing > 0 ? { width: `calc(100% + ${characterSpacing}pt)` } : {}),\n ...(isTopAligned ? { height: '100%' } : {}),\n };\n\n const textBlock = document.createElement('div');\n textBlock.id = 'text-' + String(schema.id);\n Object.assign(textBlock.style, textBlockStyle);\n\n container.appendChild(textBlock);\n\n return textBlock;\n};\n\n/**\n * Firefox doesn't support 'plaintext-only' contentEditable mode, which we want to avoid mark-up.\n * This function adds a workaround for Firefox to make the contentEditable element behave like 'plaintext-only'.\n */\nexport const makeElementPlainTextContentEditable = (element: HTMLElement) => {\n if (!isFirefox()) {\n element.contentEditable = 'plaintext-only';\n return;\n }\n\n element.contentEditable = 'true';\n element.addEventListener('keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n document.execCommand('insertLineBreak', false, undefined);\n }\n });\n\n element.addEventListener('paste', (e: ClipboardEvent) => {\n e.preventDefault();\n const paste = e.clipboardData?.getData('text');\n const selection = window.getSelection();\n if (!selection?.rangeCount) return;\n selection.deleteFromDocument();\n selection.getRangeAt(0).insertNode(document.createTextNode(paste || ''));\n selection.collapseToEnd();\n });\n};\n\nexport const mapVerticalAlignToFlex = (verticalAlignmentValue: string | undefined) => {\n switch (verticalAlignmentValue) {\n case VERTICAL_ALIGN_TOP:\n return 'flex-start';\n case VERTICAL_ALIGN_MIDDLE:\n return 'center';\n case VERTICAL_ALIGN_BOTTOM:\n return 'flex-end';\n }\n return 'flex-start';\n};\n\nconst getBackgroundColor = (schema: { backgroundColor?: string }) => {\n if (!schema.backgroundColor) return 'transparent';\n return schema.backgroundColor;\n};\n","import type { Plugin } from '@pdfme/common';\nimport { pdfRender } from './pdfRender.js';\nimport { propPanel } from './propPanel.js';\nimport { uiRender } from './uiRender.js';\nimport type { TextSchema } from './types.js';\nimport { TextCursorInput } from 'lucide';\nimport { createSvgStr } from '../utils.js';\n\nconst textSchema: Plugin<TextSchema> = {\n pdf: pdfRender,\n ui: uiRender,\n propPanel,\n icon: createSvgStr(TextCursorInput),\n};\n\nexport default textSchema;\n","import text from './text/index.js';\n\n// The default built-in plugin surface is intentionally limited to text.\n// Generator/UI consumers that need image, barcode, table, or other schema types\n// must import and pass those plugins explicitly from `@pdfme/schemas`.\nconst builtInPlugins = { Text: text };\n\nexport { builtInPlugins };\n"],"mappings":"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"}
package/dist/builtins.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as builtInPlugins } from "./builtins-8En4EIAG.js";
1
+ import { t as builtInPlugins } from "./builtins-WchxRSf_.js";
2
2
  export { builtInPlugins };
@@ -1,7 +1,7 @@
1
- import { a as createListItemSplitRange, c as getListItemRange, i as TEXT_LINE_SPLIT_UNIT, l as getTableBodyRange, n as LIST_ITEM_SPLIT_UNIT, o as createTableBodySplitRange, r as TABLE_BODY_SPLIT_UNIT, s as createTextLineSplitRange, t as BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS, u as getTextLineRange } from "./splitRange-BHV0vb0Q.js";
2
- import { n as getDynamicLayoutForTable } from "./dynamicTemplate-CnK0nlnj.js";
3
- import { t as getDynamicLayoutForList } from "./dynamicTemplate-DQF7c6NR.js";
4
- import { n as getDynamicLayoutForMultiVariableText, t as getDynamicLayoutForText } from "./dynamicTemplate-CCCmLMvQ.js";
1
+ import { a as createListItemSplitRange, c as getListItemRange, i as TEXT_LINE_SPLIT_UNIT, l as getTableBodyRange, n as LIST_ITEM_SPLIT_UNIT, o as createTableBodySplitRange, r as TABLE_BODY_SPLIT_UNIT, s as createTextLineSplitRange, t as BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS, u as getTextLineRange } from "./splitRange-B6311Noc.js";
2
+ import { n as getDynamicLayoutForTable } from "./dynamicTemplate-DkTVIMNr.js";
3
+ import { t as getDynamicLayoutForList } from "./dynamicTemplate-CcnCXHfM.js";
4
+ import { n as getDynamicLayoutForMultiVariableText, t as getDynamicLayoutForText } from "./dynamicTemplate-DEwOv_DE.js";
5
5
  //#region src/dynamicLayout.ts
6
6
  var isExpandableTextSchema = (schema) => (schema.type === "text" || schema.type === "multiVariableText") && schema.overflow === "expand";
7
7
  var isDynamicLayoutSchema = (schema) => schema.type === "table" || schema.type === "list" || isExpandableTextSchema(schema);
@@ -1,4 +1,4 @@
1
- import { a as createListItemSplitRange, h as getFontKitFont, v as splitTextToSize } from "./splitRange-BHV0vb0Q.js";
1
+ import { a as createListItemSplitRange, b as splitTextToSize, g as getFontKitFont } from "./splitRange-B6311Noc.js";
2
2
  import { getDefaultFont, mm2pt, pt2mm } from "@pdfme/common";
3
3
  //#region src/list/constants.ts
4
4
  var LIST_STYLE_BULLET = "bullet";
@@ -111,4 +111,4 @@ var getDynamicLayoutForList = async (value, args) => {
111
111
  //#endregion
112
112
  export { normalizeListItems as a, LIST_STYLE_BULLET as c, normalizeListItemEntries as i, LIST_STYLE_ORDERED as l, calculateListLayout as n, serializeListItems as o, getListMarkers as r, DEFAULT_LIST_STYLE as s, getDynamicLayoutForList as t };
113
113
 
114
- //# sourceMappingURL=dynamicTemplate-DQF7c6NR.js.map
114
+ //# sourceMappingURL=dynamicTemplate-CcnCXHfM.js.map