@pdfme/schemas 6.1.13-dev.17 → 6.1.13-dev.23
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/barcodes/helper.d.ts +7 -0
- package/dist/dynamicLayout.js +1 -1
- package/dist/{dynamicTemplate-DFk_de1Y.js → dynamicTemplate-CCCmLMvQ.js} +5 -4
- package/dist/dynamicTemplate-CCCmLMvQ.js.map +1 -0
- package/dist/{helper-VroN19Ci.js → helper-4iOJns1p.js} +26 -3
- package/dist/helper-4iOJns1p.js.map +1 -0
- package/dist/index.js +47 -12
- package/dist/index.js.map +1 -1
- package/dist/multiVariableText/helper.d.ts +8 -0
- package/dist/multiVariableText/types.d.ts +2 -0
- package/dist/texts.js +1 -1
- package/package.json +1 -1
- package/dist/dynamicTemplate-DFk_de1Y.js.map +0 -1
- package/dist/helper-VroN19Ci.js.map +0 -1
|
@@ -9,6 +9,13 @@ export declare const barCodeType2Bcid: (type: BarcodeTypes) => "code128" | "code
|
|
|
9
9
|
* Strip hash from the beginning of HTML hex color codes for the bwip.js lib
|
|
10
10
|
*/
|
|
11
11
|
export declare const mapHexColorForBwipJsLib: (color: string | undefined, fallback?: string) => string;
|
|
12
|
+
export type BarcodeRenderRuntime = 'document-canvas' | 'offscreencanvas' | 'node-buffer';
|
|
13
|
+
/**
|
|
14
|
+
* Pick a barcode renderer from capabilities, not `typeof window`.
|
|
15
|
+
* Browser Workers have neither `window` nor Node's `bwip-js.toBuffer()`.
|
|
16
|
+
* OffscreenCanvas without `toCanvas()` (Node bwip-js export) falls back to `toBuffer()`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const resolveBarcodeRenderRuntime: () => BarcodeRenderRuntime;
|
|
12
19
|
export declare const createBarCode: (arg: {
|
|
13
20
|
type: BarcodeTypes;
|
|
14
21
|
input: string;
|
package/dist/dynamicLayout.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
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
2
|
import { n as getDynamicLayoutForTable } from "./dynamicTemplate-CnK0nlnj.js";
|
|
3
3
|
import { t as getDynamicLayoutForList } from "./dynamicTemplate-DQF7c6NR.js";
|
|
4
|
-
import { n as getDynamicLayoutForMultiVariableText, t as getDynamicLayoutForText } from "./dynamicTemplate-
|
|
4
|
+
import { n as getDynamicLayoutForMultiVariableText, t as getDynamicLayoutForText } from "./dynamicTemplate-CCCmLMvQ.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,13 +1,14 @@
|
|
|
1
1
|
import { s as createTextLineSplitRange } from "./splitRange-BHV0vb0Q.js";
|
|
2
2
|
import { a as measureTextLines, c as sumLineHeights, d as isInlineMarkdownTextSchema, n as getTextLineHeightsWithBox, r as getTextSplitBoxStyle } from "./measure-BC7tjAtT.js";
|
|
3
|
-
import { n as
|
|
3
|
+
import { i as validateVariables, n as substituteVariables, r as substituteVariablesAsInlineMarkdownLiterals, t as resolveReadOnlyMultiVariableText } from "./helper-4iOJns1p.js";
|
|
4
4
|
//#region src/multiVariableText/dynamicTemplate.ts
|
|
5
5
|
var getDynamicLayoutForMultiVariableText = async (value, args) => {
|
|
6
6
|
if (args.schema.type !== "multiVariableText") return { heights: [args.schema.height] };
|
|
7
7
|
const schema = args.schema;
|
|
8
8
|
if (schema.overflow !== "expand") return { heights: [schema.height] };
|
|
9
|
-
let renderValue
|
|
10
|
-
if (
|
|
9
|
+
let renderValue;
|
|
10
|
+
if (schema.readOnly) renderValue = resolveReadOnlyMultiVariableText(schema, value);
|
|
11
|
+
else {
|
|
11
12
|
if (!validateVariables(value, schema)) return { heights: [schema.height] };
|
|
12
13
|
renderValue = isInlineMarkdownTextSchema(schema) ? substituteVariablesAsInlineMarkdownLiterals(schema.text || "", value) : substituteVariables(schema.text || "", value);
|
|
13
14
|
}
|
|
@@ -72,4 +73,4 @@ var getDynamicLayoutForText = async (value, args) => {
|
|
|
72
73
|
//#endregion
|
|
73
74
|
export { getDynamicLayoutForMultiVariableText as n, getDynamicLayoutForText as t };
|
|
74
75
|
|
|
75
|
-
//# sourceMappingURL=dynamicTemplate-
|
|
76
|
+
//# sourceMappingURL=dynamicTemplate-CCCmLMvQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamicTemplate-CCCmLMvQ.js","names":[],"sources":["../src/multiVariableText/dynamicTemplate.ts","../src/text/dynamicTemplate.ts"],"sourcesContent":["import type { DynamicLayoutArgs, DynamicLayoutResult } from '@pdfme/common';\nimport { TEXT_OVERFLOW_EXPAND } from '../text/constants.js';\nimport {\n getTextLineHeightsWithBox,\n getTextSplitBoxStyle,\n measureTextLines,\n sumLineHeights,\n} from '../text/measure.js';\nimport { isInlineMarkdownTextSchema } from '../text/richText.js';\nimport type { MultiVariableTextSchema } from './types.js';\nimport {\n resolveReadOnlyMultiVariableText,\n substituteVariables,\n substituteVariablesAsInlineMarkdownLiterals,\n validateVariables,\n} from './helper.js';\nimport { createTextLineSplitRange } from '../splitRange.js';\n\nexport const getDynamicLayoutForMultiVariableText = async (\n value: string,\n args: DynamicLayoutArgs,\n): Promise<DynamicLayoutResult> => {\n if (args.schema.type !== 'multiVariableText') return { heights: [args.schema.height] };\n\n const schema = args.schema as MultiVariableTextSchema;\n if (schema.overflow !== TEXT_OVERFLOW_EXPAND) {\n return { heights: [schema.height] };\n }\n\n let renderValue: string;\n if (schema.readOnly) {\n renderValue = resolveReadOnlyMultiVariableText(schema, value);\n } else {\n if (!validateVariables(value, schema)) {\n return { heights: [schema.height] };\n }\n\n renderValue = isInlineMarkdownTextSchema(schema)\n ? substituteVariablesAsInlineMarkdownLiterals(schema.text || '', value)\n : substituteVariables(schema.text || '', value);\n }\n const { lineHeights } = await measureTextLines({\n value: renderValue,\n schema,\n font: args.options.font,\n _cache: args._cache,\n // `expand` owns the height decision, so measuring against a shrink-to-fit font size\n // would make the field keep its original box instead of growing.\n ignoreDynamicFontSize: true,\n });\n const heights = getTextLineHeightsWithBox(lineHeights, schema);\n const measuredHeight = sumLineHeights(heights);\n\n if (measuredHeight <= schema.height || lineHeights.length === 0) {\n return {\n heights: [schema.height],\n patchSplitSchema: () => ({ dynamicFontSize: undefined }),\n };\n }\n\n return {\n heights: lineHeights.length === 1 ? [Math.max(schema.height, measuredHeight)] : heights,\n patchSplitSchema: ({ start, end, isSplit }) => ({\n dynamicFontSize: undefined,\n __splitRange: lineHeights.length === 1 ? undefined : createTextLineSplitRange(start, end),\n __isSplit: isSplit,\n ...getTextSplitBoxStyle(schema, { start, end }, lineHeights.length),\n }),\n };\n};\n","import type { DynamicLayoutArgs, DynamicLayoutResult } from '@pdfme/common';\nimport { TEXT_OVERFLOW_EXPAND } from './constants.js';\nimport {\n getTextLineHeightsWithBox,\n getTextSplitBoxStyle,\n measureTextLines,\n sumLineHeights,\n} from './measure.js';\nimport type { TextSchema } from './types.js';\nimport { createTextLineSplitRange } from '../splitRange.js';\n\nexport const getDynamicLayoutForText = async (\n value: string,\n args: DynamicLayoutArgs,\n): Promise<DynamicLayoutResult> => {\n if (args.schema.type !== 'text') return { heights: [args.schema.height] };\n\n const schema = args.schema as TextSchema;\n if (schema.overflow !== TEXT_OVERFLOW_EXPAND) {\n return { heights: [schema.height] };\n }\n\n const { lineHeights } = await measureTextLines({\n value,\n schema,\n font: args.options.font,\n _cache: args._cache,\n // `expand` owns the height decision, so measuring against a shrink-to-fit font size\n // would make the field keep its original box instead of growing.\n ignoreDynamicFontSize: true,\n });\n const heights = getTextLineHeightsWithBox(lineHeights, schema);\n const measuredHeight = sumLineHeights(heights);\n\n if (measuredHeight <= schema.height || lineHeights.length === 0) {\n return {\n heights: [schema.height],\n patchSplitSchema: () => ({ dynamicFontSize: undefined }),\n };\n }\n\n return {\n heights: lineHeights.length === 1 ? [Math.max(schema.height, measuredHeight)] : heights,\n patchSplitSchema: ({ start, end, isSplit }) => ({\n dynamicFontSize: undefined,\n __splitRange: lineHeights.length === 1 ? undefined : createTextLineSplitRange(start, end),\n __isSplit: isSplit,\n ...getTextSplitBoxStyle(schema, { start, end }, lineHeights.length),\n }),\n };\n};\n"],"mappings":";;;;AAkBA,IAAa,uCAAuC,OAClD,OACA,SACiC;CACjC,IAAI,KAAK,OAAO,SAAS,qBAAqB,OAAO,EAAE,SAAS,CAAC,KAAK,OAAO,MAAM,EAAE;CAErF,MAAM,SAAS,KAAK;CACpB,IAAI,OAAO,aAAA,UACT,OAAO,EAAE,SAAS,CAAC,OAAO,MAAM,EAAE;CAGpC,IAAI;CACJ,IAAI,OAAO,UACT,cAAc,iCAAiC,QAAQ,KAAK;MACvD;EACL,IAAI,CAAC,kBAAkB,OAAO,MAAM,GAClC,OAAO,EAAE,SAAS,CAAC,OAAO,MAAM,EAAE;EAGpC,cAAc,2BAA2B,MAAM,IAC3C,4CAA4C,OAAO,QAAQ,IAAI,KAAK,IACpE,oBAAoB,OAAO,QAAQ,IAAI,KAAK;CAClD;CACA,MAAM,EAAE,gBAAgB,MAAM,iBAAiB;EAC7C,OAAO;EACP;EACA,MAAM,KAAK,QAAQ;EACnB,QAAQ,KAAK;EAGb,uBAAuB;CACzB,CAAC;CACD,MAAM,UAAU,0BAA0B,aAAa,MAAM;CAC7D,MAAM,iBAAiB,eAAe,OAAO;CAE7C,IAAI,kBAAkB,OAAO,UAAU,YAAY,WAAW,GAC5D,OAAO;EACL,SAAS,CAAC,OAAO,MAAM;EACvB,yBAAyB,EAAE,iBAAiB,KAAA,EAAU;CACxD;CAGF,OAAO;EACL,SAAS,YAAY,WAAW,IAAI,CAAC,KAAK,IAAI,OAAO,QAAQ,cAAc,CAAC,IAAI;EAChF,mBAAmB,EAAE,OAAO,KAAK,eAAe;GAC9C,iBAAiB,KAAA;GACjB,cAAc,YAAY,WAAW,IAAI,KAAA,IAAY,yBAAyB,OAAO,GAAG;GACxF,WAAW;GACX,GAAG,qBAAqB,QAAQ;IAAE;IAAO;GAAI,GAAG,YAAY,MAAM;EACpE;CACF;AACF;;;AC1DA,IAAa,0BAA0B,OACrC,OACA,SACiC;CACjC,IAAI,KAAK,OAAO,SAAS,QAAQ,OAAO,EAAE,SAAS,CAAC,KAAK,OAAO,MAAM,EAAE;CAExE,MAAM,SAAS,KAAK;CACpB,IAAI,OAAO,aAAA,UACT,OAAO,EAAE,SAAS,CAAC,OAAO,MAAM,EAAE;CAGpC,MAAM,EAAE,gBAAgB,MAAM,iBAAiB;EAC7C;EACA;EACA,MAAM,KAAK,QAAQ;EACnB,QAAQ,KAAK;EAGb,uBAAuB;CACzB,CAAC;CACD,MAAM,UAAU,0BAA0B,aAAa,MAAM;CAC7D,MAAM,iBAAiB,eAAe,OAAO;CAE7C,IAAI,kBAAkB,OAAO,UAAU,YAAY,WAAW,GAC5D,OAAO;EACL,SAAS,CAAC,OAAO,MAAM;EACvB,yBAAyB,EAAE,iBAAiB,KAAA,EAAU;CACxD;CAGF,OAAO;EACL,SAAS,YAAY,WAAW,IAAI,CAAC,KAAK,IAAI,OAAO,QAAQ,cAAc,CAAC,IAAI;EAChF,mBAAmB,EAAE,OAAO,KAAK,eAAe;GAC9C,iBAAiB,KAAA;GACjB,cAAc,YAAY,WAAW,IAAI,KAAA,IAAY,yBAAyB,OAAO,GAAG;GACxF,WAAW;GACX,GAAG,qBAAqB,QAAQ;IAAE;IAAO;GAAI,GAAG,YAAY,MAAM;EACpE;CACF;AACF"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
import { h as escapeInlineMarkdown } from "./measure-BC7tjAtT.js";
|
|
1
|
+
import { d as isInlineMarkdownTextSchema, h as escapeInlineMarkdown } from "./measure-BC7tjAtT.js";
|
|
2
2
|
//#region src/multiVariableText/helper.ts
|
|
3
|
+
var tryParseVariableMap = (variablesIn) => {
|
|
4
|
+
if (!variablesIn) return;
|
|
5
|
+
if (typeof variablesIn === "object" && !Array.isArray(variablesIn)) return variablesIn;
|
|
6
|
+
if (typeof variablesIn !== "string") return;
|
|
7
|
+
try {
|
|
8
|
+
const parsed = JSON.parse(variablesIn);
|
|
9
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
|
|
10
|
+
} catch {}
|
|
11
|
+
};
|
|
3
12
|
var substituteVariables = (text, variablesIn, valueMapper = (value) => value) => {
|
|
4
13
|
if (!text) return "";
|
|
5
14
|
let substitutedText = text;
|
|
@@ -20,6 +29,20 @@ var substituteVariables = (text, variablesIn, valueMapper = (value) => value) =>
|
|
|
20
29
|
return substitutedText;
|
|
21
30
|
};
|
|
22
31
|
var substituteVariablesAsInlineMarkdownLiterals = (text, variablesIn) => substituteVariables(text, variablesIn, escapeInlineMarkdown);
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a read-only MVT field to display text.
|
|
34
|
+
* jsx locked fields set `contentSnapshot` and store already-substituted text
|
|
35
|
+
* in `content`. Designer templates omit that flag and store variable JSON.
|
|
36
|
+
* Never treat `content` as an expression, and never infer a snapshot from keys.
|
|
37
|
+
*/
|
|
38
|
+
var resolveReadOnlyMultiVariableText = (schema, value) => {
|
|
39
|
+
if (schema.contentSnapshot) return schema.content ?? value ?? schema.text ?? "";
|
|
40
|
+
if (!schema.variables?.length) return schema.text || "";
|
|
41
|
+
const variableMap = tryParseVariableMap(schema.content) ?? tryParseVariableMap(value);
|
|
42
|
+
if (variableMap) return isInlineMarkdownTextSchema(schema) ? substituteVariablesAsInlineMarkdownLiterals(schema.text || "", variableMap) : substituteVariables(schema.text || "", variableMap);
|
|
43
|
+
if (typeof value === "string" && value.length > 0) return value;
|
|
44
|
+
return schema.content || schema.text || "";
|
|
45
|
+
};
|
|
23
46
|
var validateVariables = (value, schema) => {
|
|
24
47
|
if (schema.variables.length === 0) return true;
|
|
25
48
|
let values;
|
|
@@ -35,6 +58,6 @@ var validateVariables = (value, schema) => {
|
|
|
35
58
|
return true;
|
|
36
59
|
};
|
|
37
60
|
//#endregion
|
|
38
|
-
export {
|
|
61
|
+
export { validateVariables as i, substituteVariables as n, substituteVariablesAsInlineMarkdownLiterals as r, resolveReadOnlyMultiVariableText as t };
|
|
39
62
|
|
|
40
|
-
//# sourceMappingURL=helper-
|
|
63
|
+
//# sourceMappingURL=helper-4iOJns1p.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-4iOJns1p.js","names":[],"sources":["../src/multiVariableText/helper.ts"],"sourcesContent":["import { MultiVariableTextSchema } from './types.js';\nimport { escapeInlineMarkdown } from '../text/inlineMarkdown.js';\nimport { isInlineMarkdownTextSchema } from '../text/richText.js';\n\nexport const tryParseVariableMap = (\n variablesIn: string | Record<string, string> | undefined,\n): Record<string, string> | undefined => {\n if (!variablesIn) {\n return undefined;\n }\n if (typeof variablesIn === 'object' && !Array.isArray(variablesIn)) {\n return variablesIn;\n }\n if (typeof variablesIn !== 'string') {\n return undefined;\n }\n try {\n const parsed: unknown = JSON.parse(variablesIn);\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, string>;\n }\n } catch {\n // Designer content is variable JSON; jsx readOnly content is already plaintext.\n }\n return undefined;\n};\n\nexport const substituteVariables = (\n text: string,\n variablesIn: string | Record<string, string>,\n valueMapper: (value: string, variableName: string) => string = (value) => value,\n): string => {\n if (!text) {\n return '';\n }\n\n let substitutedText = text;\n\n if (variablesIn) {\n let variables: Record<string, string>;\n try {\n variables =\n typeof variablesIn === 'string'\n ? (JSON.parse(variablesIn || '{}') as Record<string, string>)\n : variablesIn;\n } catch {\n throw new SyntaxError(`[@pdfme/schemas] MVT: invalid JSON string '${variablesIn as string}'`);\n }\n\n Object.keys(variables).forEach((variableName) => {\n // handle special characters in variable name\n const variableForRegex = variableName.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n const regex = new RegExp('\\\\{' + variableForRegex + '\\\\}', 'g');\n substitutedText = substitutedText.replace(\n regex,\n valueMapper(variables[variableName], variableName),\n );\n });\n }\n\n // Remove any variables that were not substituted from inputs\n substitutedText = substitutedText.replace(/{[^{}]+}/g, '');\n\n return substitutedText;\n};\n\nexport const substituteVariablesAsInlineMarkdownLiterals = (\n text: string,\n variablesIn: string | Record<string, string>,\n): string => substituteVariables(text, variablesIn, escapeInlineMarkdown);\n\n/**\n * Resolve a read-only MVT field to display text.\n * jsx locked fields set `contentSnapshot` and store already-substituted text\n * in `content`. Designer templates omit that flag and store variable JSON.\n * Never treat `content` as an expression, and never infer a snapshot from keys.\n */\nexport const resolveReadOnlyMultiVariableText = (\n schema: MultiVariableTextSchema,\n value?: string,\n): string => {\n if (schema.contentSnapshot) {\n return schema.content ?? value ?? schema.text ?? '';\n }\n\n if (!schema.variables?.length) {\n return schema.text || '';\n }\n\n const variableMap = tryParseVariableMap(schema.content) ?? tryParseVariableMap(value);\n if (variableMap) {\n return isInlineMarkdownTextSchema(schema)\n ? substituteVariablesAsInlineMarkdownLiterals(schema.text || '', variableMap)\n : substituteVariables(schema.text || '', variableMap);\n }\n\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n return schema.content || schema.text || '';\n};\n\nexport const validateVariables = (value: string, schema: MultiVariableTextSchema): boolean => {\n if (schema.variables.length === 0) {\n return true;\n }\n\n let values;\n try {\n values = value ? (JSON.parse(value) as Record<string, string>) : {};\n } catch {\n throw new SyntaxError(\n `[@pdfme/generator] invalid JSON string '${value}' for variables in field ${schema.name}`,\n );\n }\n\n for (const variable of schema.variables) {\n if (\n !Object.prototype.hasOwnProperty.call(values, variable) ||\n values[variable] === null ||\n values[variable] === undefined\n ) {\n if (schema.required) {\n throw new Error(\n `[@pdfme/generator] variable ${variable} is missing for field ${schema.name}`,\n );\n }\n // If not required, then simply don't render this field if an input is missing\n return false;\n }\n }\n\n return true;\n};\n"],"mappings":";;AAIA,IAAa,uBACX,gBACuC;CACvC,IAAI,CAAC,aACH;CAEF,IAAI,OAAO,gBAAgB,YAAY,CAAC,MAAM,QAAQ,WAAW,GAC/D,OAAO;CAET,IAAI,OAAO,gBAAgB,UACzB;CAEF,IAAI;EACF,MAAM,SAAkB,KAAK,MAAM,WAAW;EAC9C,IAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,GAC/D,OAAO;CAEX,QAAQ,CAER;AAEF;AAEA,IAAa,uBACX,MACA,aACA,eAAgE,UAAU,UAC/D;CACX,IAAI,CAAC,MACH,OAAO;CAGT,IAAI,kBAAkB;CAEtB,IAAI,aAAa;EACf,IAAI;EACJ,IAAI;GACF,YACE,OAAO,gBAAgB,WAClB,KAAK,MAAM,eAAe,IAAI,IAC/B;EACR,QAAQ;GACN,MAAM,IAAI,YAAY,8CAA8C,YAAsB,EAAE;EAC9F;EAEA,OAAO,KAAK,SAAS,CAAC,CAAC,SAAS,iBAAiB;GAE/C,MAAM,mBAAmB,aAAa,QAAQ,0BAA0B,MAAM;GAC9E,MAAM,QAAQ,IAAI,OAAO,QAAQ,mBAAmB,OAAO,GAAG;GAC9D,kBAAkB,gBAAgB,QAChC,OACA,YAAY,UAAU,eAAe,YAAY,CACnD;EACF,CAAC;CACH;CAGA,kBAAkB,gBAAgB,QAAQ,aAAa,EAAE;CAEzD,OAAO;AACT;AAEA,IAAa,+CACX,MACA,gBACW,oBAAoB,MAAM,aAAa,oBAAoB;;;;;;;AAQxE,IAAa,oCACX,QACA,UACW;CACX,IAAI,OAAO,iBACT,OAAO,OAAO,WAAW,SAAS,OAAO,QAAQ;CAGnD,IAAI,CAAC,OAAO,WAAW,QACrB,OAAO,OAAO,QAAQ;CAGxB,MAAM,cAAc,oBAAoB,OAAO,OAAO,KAAK,oBAAoB,KAAK;CACpF,IAAI,aACF,OAAO,2BAA2B,MAAM,IACpC,4CAA4C,OAAO,QAAQ,IAAI,WAAW,IAC1E,oBAAoB,OAAO,QAAQ,IAAI,WAAW;CAGxD,IAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAC9C,OAAO;CAET,OAAO,OAAO,WAAW,OAAO,QAAQ;AAC1C;AAEA,IAAa,qBAAqB,OAAe,WAA6C;CAC5F,IAAI,OAAO,UAAU,WAAW,GAC9B,OAAO;CAGT,IAAI;CACJ,IAAI;EACF,SAAS,QAAS,KAAK,MAAM,KAAK,IAA+B,CAAC;CACpE,QAAQ;EACN,MAAM,IAAI,YACR,2CAA2C,MAAM,2BAA2B,OAAO,MACrF;CACF;CAEA,KAAK,MAAM,YAAY,OAAO,WAC5B,IACE,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,QAAQ,KACtD,OAAO,cAAc,QACrB,OAAO,cAAc,KAAA,GACrB;EACA,IAAI,OAAO,UACT,MAAM,IAAI,MACR,+BAA+B,SAAS,wBAAwB,OAAO,MACzE;EAGF,OAAO;CACT;CAGF,OAAO;AACT"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { a as mapVerticalAlignToFlex, c as Formatter, i as makeElementPlainTextC
|
|
|
4
4
|
import { a as getCellPropPanelSchema, c as HEX_COLOR_PATTERN, i as getBodyWithSchemaRange, l as createSingleTable, n as getDynamicLayoutForTable, o as getColumnStylesPropPanelSchema, r as getBody, s as getDefaultCellStyles, t as getDynamicHeightsForTable } from "./dynamicTemplate-CnK0nlnj.js";
|
|
5
5
|
import { c as isEditable, d as countUniqueVariableNames, f as getVariableNames, i as createSvgStr, l as readFile, n as convertForPdfLayoutProps, o as hex2PrintingColor, p as visitVariables, r as createErrorElm, t as addAlphaToHex, u as rotatePoint } from "./utils-D_sFXK0U.js";
|
|
6
6
|
import { a as normalizeListItems, c as LIST_STYLE_BULLET, i as normalizeListItemEntries, l as LIST_STYLE_ORDERED, n as calculateListLayout, o as serializeListItems, s as DEFAULT_LIST_STYLE, t as getDynamicLayoutForList } from "./dynamicTemplate-DQF7c6NR.js";
|
|
7
|
-
import { n as
|
|
7
|
+
import { i as validateVariables, n as substituteVariables, r as substituteVariablesAsInlineMarkdownLiterals, t as resolveReadOnlyMultiVariableText } from "./helper-4iOJns1p.js";
|
|
8
8
|
import "./tables.js";
|
|
9
9
|
import "./lists.js";
|
|
10
10
|
import { DEFAULT_FONT_NAME, ZOOM, b64toUint8Array, getDefaultFont, getFallbackFontName, getInternalLinkTarget, mm2pt, normalizeLinkHref, px2mm } from "@pdfme/common";
|
|
@@ -43,9 +43,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
43
43
|
var pdfRender$3 = async (arg) => {
|
|
44
44
|
const { value, schema, ...rest } = arg;
|
|
45
45
|
if (schema.readOnly) {
|
|
46
|
-
const readOnlyValue = schema.variables.length > 0 ? value : schema.text || "";
|
|
47
46
|
await pdfRender$4({
|
|
48
|
-
value:
|
|
47
|
+
value: resolveReadOnlyMultiVariableText(schema, value),
|
|
49
48
|
schema,
|
|
50
49
|
...rest
|
|
51
50
|
});
|
|
@@ -211,7 +210,7 @@ var uiRender$3 = async (arg) => {
|
|
|
211
210
|
let text = schema.text;
|
|
212
211
|
let numVariables = schema.variables.length;
|
|
213
212
|
const renderResolvedValue = schema.readOnly === true && mode !== "designer";
|
|
214
|
-
const renderValue = renderResolvedValue ?
|
|
213
|
+
const renderValue = renderResolvedValue ? resolveReadOnlyMultiVariableText(schema, value) : isInlineMarkdownTextSchema(schema) ? substituteVariablesAsInlineMarkdownLiterals(text, value) : substituteVariables(text, value);
|
|
215
214
|
if (mode === "form" && numVariables > 0 && !renderResolvedValue) {
|
|
216
215
|
await formUiRender(arg);
|
|
217
216
|
return;
|
|
@@ -2025,6 +2024,46 @@ var barCodeType2Bcid = (type) => type === "nw7" ? "rationalizedCodabar" : type;
|
|
|
2025
2024
|
* Strip hash from the beginning of HTML hex color codes for the bwip.js lib
|
|
2026
2025
|
*/
|
|
2027
2026
|
var mapHexColorForBwipJsLib = (color, fallback) => color ? color.replace("#", "") : fallback ? fallback.replace("#", "") : "000000";
|
|
2027
|
+
var getBwipJsRenderer = () => bwipjs;
|
|
2028
|
+
var getDocument = () => globalThis.document;
|
|
2029
|
+
var getOffscreenCanvasCtor = () => globalThis.OffscreenCanvas;
|
|
2030
|
+
/**
|
|
2031
|
+
* Pick a barcode renderer from capabilities, not `typeof window`.
|
|
2032
|
+
* Browser Workers have neither `window` nor Node's `bwip-js.toBuffer()`.
|
|
2033
|
+
* OffscreenCanvas without `toCanvas()` (Node bwip-js export) falls back to `toBuffer()`.
|
|
2034
|
+
*/
|
|
2035
|
+
var resolveBarcodeRenderRuntime = () => {
|
|
2036
|
+
const doc = getDocument();
|
|
2037
|
+
const renderer = getBwipJsRenderer();
|
|
2038
|
+
if (doc && typeof doc.createElement === "function") return "document-canvas";
|
|
2039
|
+
if (typeof getOffscreenCanvasCtor() === "function" && typeof renderer.toCanvas === "function") return "offscreencanvas";
|
|
2040
|
+
if (typeof renderer.toBuffer === "function") return "node-buffer";
|
|
2041
|
+
throw new Error("[@pdfme/schemas] Barcode rendering requires a document canvas, OffscreenCanvas, or bwip-js toBuffer().");
|
|
2042
|
+
};
|
|
2043
|
+
var pngBufferFromDataUrl = (dataUrl) => Buffer$1.from(b64toUint8Array(dataUrl).buffer);
|
|
2044
|
+
var pngBufferFromBlob = async (blob) => Buffer$1.from(await blob.arrayBuffer());
|
|
2045
|
+
var renderBarcodeToCanvas = (canvas, options) => {
|
|
2046
|
+
const toCanvas = getBwipJsRenderer().toCanvas;
|
|
2047
|
+
if (typeof toCanvas !== "function") throw new Error("[@pdfme/schemas] bwip-js toCanvas() is not available in this environment.");
|
|
2048
|
+
toCanvas(canvas, options);
|
|
2049
|
+
};
|
|
2050
|
+
var renderBarcodeToDocumentCanvas = (options) => {
|
|
2051
|
+
const canvas = getDocument().createElement("canvas");
|
|
2052
|
+
renderBarcodeToCanvas(canvas, options);
|
|
2053
|
+
return pngBufferFromDataUrl(canvas.toDataURL("image/png"));
|
|
2054
|
+
};
|
|
2055
|
+
var renderBarcodeToOffscreenCanvas = async (options) => {
|
|
2056
|
+
const OffscreenCanvasCtor = getOffscreenCanvasCtor();
|
|
2057
|
+
if (typeof OffscreenCanvasCtor !== "function") throw new Error("[@pdfme/schemas] OffscreenCanvas is not available in this environment.");
|
|
2058
|
+
const canvas = new OffscreenCanvasCtor(1, 1);
|
|
2059
|
+
renderBarcodeToCanvas(canvas, options);
|
|
2060
|
+
return pngBufferFromBlob(await canvas.convertToBlob({ type: "image/png" }));
|
|
2061
|
+
};
|
|
2062
|
+
var renderBarcodeToNodeBuffer = async (options) => {
|
|
2063
|
+
const toBuffer = getBwipJsRenderer().toBuffer;
|
|
2064
|
+
if (typeof toBuffer !== "function") throw new Error("[@pdfme/schemas] bwip-js toBuffer() is not available in this environment.");
|
|
2065
|
+
return toBuffer(options);
|
|
2066
|
+
};
|
|
2028
2067
|
var createBarCode = async (arg) => {
|
|
2029
2068
|
const { type, input, width, height, backgroundColor, barColor, textColor, includetext = true } = arg;
|
|
2030
2069
|
const bwipjsArg = {
|
|
@@ -2039,14 +2078,10 @@ var createBarCode = async (arg) => {
|
|
|
2039
2078
|
if (backgroundColor) bwipjsArg.backgroundcolor = mapHexColorForBwipJsLib(backgroundColor);
|
|
2040
2079
|
if (barColor) bwipjsArg.barcolor = mapHexColorForBwipJsLib(barColor);
|
|
2041
2080
|
if (textColor) bwipjsArg.textcolor = mapHexColorForBwipJsLib(textColor);
|
|
2042
|
-
|
|
2043
|
-
if (
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
const dataUrl = canvas.toDataURL("image/png");
|
|
2047
|
-
res = Buffer$1.from(b64toUint8Array(dataUrl).buffer);
|
|
2048
|
-
} else res = await bwipjs.toBuffer(bwipjsArg);
|
|
2049
|
-
return res;
|
|
2081
|
+
const runtime = resolveBarcodeRenderRuntime();
|
|
2082
|
+
if (runtime === "document-canvas") return renderBarcodeToDocumentCanvas(bwipjsArg);
|
|
2083
|
+
if (runtime === "offscreencanvas") return renderBarcodeToOffscreenCanvas(bwipjsArg);
|
|
2084
|
+
return renderBarcodeToNodeBuffer(bwipjsArg);
|
|
2050
2085
|
};
|
|
2051
2086
|
//#endregion
|
|
2052
2087
|
//#region src/barcodes/pdfRender.ts
|