@pdfme/schemas 6.0.6-dev.9 → 6.1.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/builtins-CWHhKSVA.js +1389 -0
  2. package/dist/builtins-CWHhKSVA.js.map +1 -0
  3. package/dist/builtins.js +1 -1
  4. package/dist/{dynamicTemplate-DxHU9waC.js → dynamicTemplate-DmuRoTw4.js} +17 -345
  5. package/dist/dynamicTemplate-DmuRoTw4.js.map +1 -0
  6. package/dist/helper-M_MmV_d5.js +357 -0
  7. package/dist/helper-M_MmV_d5.js.map +1 -0
  8. package/dist/index.d.ts +4 -2
  9. package/dist/index.js +958 -177
  10. package/dist/index.js.map +1 -1
  11. package/dist/list/constants.d.ts +10 -0
  12. package/dist/list/dynamicTemplate.d.ts +2 -0
  13. package/dist/list/helper.d.ts +15 -0
  14. package/dist/list/index.d.ts +4 -0
  15. package/dist/list/pdfRender.d.ts +3 -0
  16. package/dist/list/propPanel.d.ts +3 -0
  17. package/dist/list/types.d.ts +36 -0
  18. package/dist/list/uiRender.d.ts +3 -0
  19. package/dist/lists-B6dmgpkS.js +117 -0
  20. package/dist/lists-B6dmgpkS.js.map +1 -0
  21. package/dist/lists.d.ts +3 -0
  22. package/dist/lists.js +2 -0
  23. package/dist/multiVariableText/helper.d.ts +2 -1
  24. package/dist/tables/dynamicTemplate.d.ts +2 -1
  25. package/dist/tables.d.ts +1 -1
  26. package/dist/tables.js +2 -2
  27. package/dist/text/constants.d.ts +13 -0
  28. package/dist/text/inlineMarkdown.d.ts +4 -0
  29. package/dist/text/richText.d.ts +46 -0
  30. package/dist/text/richTextPdfRender.d.ts +34 -0
  31. package/dist/text/types.d.ts +18 -0
  32. package/dist/text/uiRender.d.ts +1 -1
  33. package/dist/utils.js +2 -2
  34. package/dist/utils.js.map +1 -1
  35. package/package.json +7 -2
  36. package/dist/builtins-KUsYW25j.js +0 -613
  37. package/dist/builtins-KUsYW25j.js.map +0 -1
  38. package/dist/dynamicTemplate-DxHU9waC.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ import type { LIST_STYLE } from './types.js';
2
+ export declare const LIST_STYLE_BULLET: LIST_STYLE;
3
+ export declare const LIST_STYLE_ORDERED: LIST_STYLE;
4
+ export declare const DEFAULT_LIST_STYLE: LIST_STYLE;
5
+ export declare const DEFAULT_MARKER = "\u2022";
6
+ export declare const DEFAULT_MARKER_WIDTH = 6;
7
+ export declare const DEFAULT_MARKER_GAP = 2;
8
+ export declare const DEFAULT_INDENT_SIZE = 6;
9
+ export declare const DEFAULT_ITEM_SPACING = 1;
10
+ export declare const MAX_INDENT_LEVEL = 8;
@@ -0,0 +1,2 @@
1
+ import type { DynamicLayoutArgs, DynamicLayoutResult } from '@pdfme/common';
2
+ export declare const getDynamicLayoutForList: (value: string, args: DynamicLayoutArgs) => Promise<DynamicLayoutResult>;
@@ -0,0 +1,15 @@
1
+ import { CommonOptions } from '@pdfme/common';
2
+ import type { ListItem, ListLayout, ListSchema } from './types.js';
3
+ export declare const normalizeListItems: (value: unknown) => string[];
4
+ export declare const parseListItem: (value: string) => ListItem;
5
+ export declare const normalizeListItemEntries: (value: unknown) => ListItem[];
6
+ export declare const serializeListItems: (items: ListItem[]) => string;
7
+ export declare const getListMarkers: (schema: ListSchema, items: string[]) => string[];
8
+ export declare const calculateListLayout: (arg: {
9
+ schema: ListSchema;
10
+ items: string[];
11
+ markerItems?: string[];
12
+ startIndex: number;
13
+ options: CommonOptions;
14
+ _cache: Map<string | number, unknown>;
15
+ }) => Promise<ListLayout>;
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from '@pdfme/common';
2
+ import type { ListSchema } from './types.js';
3
+ declare const listSchema: Plugin<ListSchema>;
4
+ export default listSchema;
@@ -0,0 +1,3 @@
1
+ import type { PDFRenderProps } from '@pdfme/common';
2
+ import type { ListSchema } from './types.js';
3
+ export declare const pdfRender: (arg: PDFRenderProps<ListSchema>) => Promise<void>;
@@ -0,0 +1,3 @@
1
+ import type { PropPanel } from '@pdfme/common';
2
+ import type { ListSchema } from './types.js';
3
+ export declare const propPanel: PropPanel<ListSchema>;
@@ -0,0 +1,36 @@
1
+ import type { TextSchema } from '../text/types.js';
2
+ export type LIST_STYLE = 'bullet' | 'ordered';
3
+ export type ListRange = {
4
+ start: number;
5
+ end?: number;
6
+ };
7
+ export type ListSchema = TextSchema & {
8
+ listStyle: LIST_STYLE;
9
+ markerWidth: number;
10
+ markerGap: number;
11
+ indentSize?: number;
12
+ itemSpacing: number;
13
+ __itemRange?: ListRange;
14
+ };
15
+ export type ListItem = {
16
+ text: string;
17
+ level: number;
18
+ };
19
+ export type ListItemLayout = {
20
+ item: string;
21
+ itemIndex: number;
22
+ level: number;
23
+ marker: string;
24
+ lines: string[];
25
+ height: number;
26
+ markerX: number;
27
+ bodyX: number;
28
+ bodyWidth: number;
29
+ };
30
+ export type ListLayout = {
31
+ items: ListItemLayout[];
32
+ totalHeight: number;
33
+ markerWidth: number;
34
+ markerGap: number;
35
+ indentSize: number;
36
+ };
@@ -0,0 +1,3 @@
1
+ import { UIRenderProps } from '@pdfme/common';
2
+ import type { ListSchema } from './types.js';
3
+ export declare const uiRender: (arg: UIRenderProps<ListSchema>) => Promise<void>;
@@ -0,0 +1,117 @@
1
+ import { a as getFontKitFont, c as splitTextToSize } from "./helper-M_MmV_d5.js";
2
+ import { getDefaultFont, mm2pt, pt2mm } from "@pdfme/common";
3
+ //#region src/list/constants.ts
4
+ var LIST_STYLE_BULLET = "bullet";
5
+ var LIST_STYLE_ORDERED = "ordered";
6
+ var DEFAULT_LIST_STYLE = LIST_STYLE_BULLET;
7
+ //#endregion
8
+ //#region src/list/helper.ts
9
+ var normalizeListItems = (value) => {
10
+ if (Array.isArray(value)) return value.map((item) => String(item));
11
+ if (typeof value !== "string") return value == null ? [] : [String(value)];
12
+ const trimmed = value.trim();
13
+ if (!trimmed) return [];
14
+ try {
15
+ const parsed = JSON.parse(trimmed);
16
+ if (Array.isArray(parsed)) return parsed.map((item) => String(item));
17
+ } catch {}
18
+ return value.split(/\r\n|\r|\n/g);
19
+ };
20
+ var parseListItem = (value) => {
21
+ const indent = value.match(/^\t+/)?.[0].length ?? 0;
22
+ return {
23
+ level: Math.min(indent, 8),
24
+ text: value.slice(indent)
25
+ };
26
+ };
27
+ var normalizeListItemEntries = (value) => normalizeListItems(value).map(parseListItem);
28
+ var formatListItem = (item) => `${" ".repeat(Math.max(0, item.level))}${item.text}`;
29
+ var serializeListItems = (items) => {
30
+ const lines = items.map(formatListItem);
31
+ return JSON.stringify(lines);
32
+ };
33
+ var getListMarkers = (schema, items) => {
34
+ if ((schema.listStyle ?? "bullet") !== "ordered") return items.map(() => "•");
35
+ const counters = Array.from({ length: 9 }, () => 0);
36
+ return items.map((rawItem) => {
37
+ const { level } = parseListItem(rawItem);
38
+ counters[level] += 1;
39
+ counters.fill(0, level + 1);
40
+ return `${counters[level]}.`;
41
+ });
42
+ };
43
+ var calculateListLayout = async (arg) => {
44
+ const { schema, items, markerItems, startIndex, options, _cache } = arg;
45
+ const markerWidth = schema.markerWidth ?? 6;
46
+ const markerGap = schema.markerGap ?? 2;
47
+ const indentSize = schema.indentSize ?? 6;
48
+ const font = options.font || getDefaultFont();
49
+ const fontKitFont = await getFontKitFont(schema.fontName, font, _cache);
50
+ const fontSize = schema.fontSize ?? 13;
51
+ const lineHeight = schema.lineHeight ?? 1;
52
+ const characterSpacing = schema.characterSpacing ?? 0;
53
+ const itemSpacing = schema.itemSpacing ?? 1;
54
+ const lineHeightMm = pt2mm(fontSize * lineHeight);
55
+ const markers = markerItems ? getListMarkers(schema, markerItems).slice(startIndex, startIndex + items.length) : getListMarkers(schema, items);
56
+ const layoutItems = items.map((rawItem, index) => {
57
+ const item = parseListItem(rawItem);
58
+ const markerX = item.level * indentSize;
59
+ const bodyX = markerX + markerWidth + markerGap;
60
+ const bodyWidth = Math.max(schema.width - bodyX, 0);
61
+ const lines = splitTextToSize({
62
+ value: item.text,
63
+ characterSpacing,
64
+ boxWidthInPt: mm2pt(Math.max(bodyWidth, .1)),
65
+ fontSize,
66
+ fontKitFont
67
+ });
68
+ const height = Math.max(lines.length, 1) * lineHeightMm + (index === items.length - 1 ? 0 : itemSpacing);
69
+ return {
70
+ item: item.text,
71
+ itemIndex: startIndex + index,
72
+ level: item.level,
73
+ marker: markers[index],
74
+ lines,
75
+ height,
76
+ markerX,
77
+ bodyX,
78
+ bodyWidth
79
+ };
80
+ });
81
+ return {
82
+ items: layoutItems,
83
+ totalHeight: layoutItems.reduce((sum, item) => sum + item.height, 0),
84
+ markerWidth,
85
+ markerGap,
86
+ indentSize
87
+ };
88
+ };
89
+ //#endregion
90
+ //#region src/list/dynamicTemplate.ts
91
+ var getDynamicLayoutForList = async (value, args) => {
92
+ if (args.schema.type !== "list") return { heights: [args.schema.height] };
93
+ const schema = args.schema;
94
+ const items = normalizeListItems(value);
95
+ if (items.length === 0) return { heights: [0] };
96
+ return {
97
+ heights: (await calculateListLayout({
98
+ schema,
99
+ items,
100
+ startIndex: 0,
101
+ options: args.options,
102
+ _cache: args._cache
103
+ })).items.map((item) => item.height),
104
+ avoidFirstUnitOnly: false,
105
+ patchSplitSchema: ({ start, end, isSplit }) => ({
106
+ __itemRange: {
107
+ start,
108
+ end
109
+ },
110
+ __isSplit: isSplit
111
+ })
112
+ };
113
+ };
114
+ //#endregion
115
+ 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 };
116
+
117
+ //# sourceMappingURL=lists-B6dmgpkS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists-B6dmgpkS.js","names":[],"sources":["../src/list/constants.ts","../src/list/helper.ts","../src/list/dynamicTemplate.ts"],"sourcesContent":["import type { LIST_STYLE } from './types.js';\n\nexport const LIST_STYLE_BULLET = 'bullet' as LIST_STYLE;\nexport const LIST_STYLE_ORDERED = 'ordered' as LIST_STYLE;\nexport const DEFAULT_LIST_STYLE = LIST_STYLE_BULLET;\nexport const DEFAULT_MARKER = '\\u2022';\nexport const DEFAULT_MARKER_WIDTH = 6;\nexport const DEFAULT_MARKER_GAP = 2;\nexport const DEFAULT_INDENT_SIZE = 6;\nexport const DEFAULT_ITEM_SPACING = 1;\nexport const MAX_INDENT_LEVEL = 8;\n","import { CommonOptions, getDefaultFont, mm2pt, pt2mm } from '@pdfme/common';\nimport {\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_FONT_SIZE,\n DEFAULT_LINE_HEIGHT,\n} from '../text/constants.js';\nimport { getFontKitFont, splitTextToSize } from '../text/helper.js';\nimport type { ListItem, ListItemLayout, ListLayout, ListSchema } from './types.js';\nimport {\n DEFAULT_INDENT_SIZE,\n DEFAULT_ITEM_SPACING,\n DEFAULT_LIST_STYLE,\n DEFAULT_MARKER,\n DEFAULT_MARKER_GAP,\n DEFAULT_MARKER_WIDTH,\n LIST_STYLE_ORDERED,\n MAX_INDENT_LEVEL,\n} from './constants.js';\n\nexport const normalizeListItems = (value: unknown): string[] => {\n if (Array.isArray(value)) return value.map((item) => String(item));\n\n if (typeof value !== 'string') {\n return value == null ? [] : [String(value)];\n }\n\n const trimmed = value.trim();\n if (!trimmed) return [];\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (Array.isArray(parsed)) return parsed.map((item) => String(item));\n } catch {\n // Fall through to newline parsing.\n }\n\n return value.split(/\\r\\n|\\r|\\n/g);\n};\n\nexport const parseListItem = (value: string): ListItem => {\n const indent = value.match(/^\\t+/)?.[0].length ?? 0;\n return {\n level: Math.min(indent, MAX_INDENT_LEVEL),\n text: value.slice(indent),\n };\n};\n\nexport const normalizeListItemEntries = (value: unknown): ListItem[] =>\n normalizeListItems(value).map(parseListItem);\n\nconst formatListItem = (item: ListItem): string =>\n `${'\\t'.repeat(Math.max(0, item.level))}${item.text}`;\n\nexport const serializeListItems = (items: ListItem[]): string => {\n const lines = items.map(formatListItem);\n return JSON.stringify(lines);\n};\n\nexport const getListMarkers = (schema: ListSchema, items: string[]): string[] => {\n if ((schema.listStyle ?? DEFAULT_LIST_STYLE) !== LIST_STYLE_ORDERED) {\n return items.map(() => DEFAULT_MARKER);\n }\n\n const counters = Array.from({ length: MAX_INDENT_LEVEL + 1 }, () => 0);\n return items.map((rawItem) => {\n const { level } = parseListItem(rawItem);\n counters[level] += 1;\n counters.fill(0, level + 1);\n return `${counters[level]}.`;\n });\n};\n\nexport const calculateListLayout = async (arg: {\n schema: ListSchema;\n items: string[];\n markerItems?: string[];\n startIndex: number;\n options: CommonOptions;\n _cache: Map<string | number, unknown>;\n}): Promise<ListLayout> => {\n const { schema, items, markerItems, startIndex, options, _cache } = arg;\n const markerWidth = schema.markerWidth ?? DEFAULT_MARKER_WIDTH;\n const markerGap = schema.markerGap ?? DEFAULT_MARKER_GAP;\n const indentSize = schema.indentSize ?? DEFAULT_INDENT_SIZE;\n const font = options.font || getDefaultFont();\n const fontKitFont = await getFontKitFont(\n schema.fontName,\n font,\n _cache as Map<string | number, import('fontkit').Font>,\n );\n\n const fontSize = schema.fontSize ?? DEFAULT_FONT_SIZE;\n const lineHeight = schema.lineHeight ?? DEFAULT_LINE_HEIGHT;\n const characterSpacing = schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const itemSpacing = schema.itemSpacing ?? DEFAULT_ITEM_SPACING;\n const lineHeightMm = pt2mm(fontSize * lineHeight);\n const markers = markerItems\n ? getListMarkers(schema, markerItems).slice(startIndex, startIndex + items.length)\n : getListMarkers(schema, items);\n\n const layoutItems: ListItemLayout[] = items.map((rawItem, index) => {\n const item = parseListItem(rawItem);\n const markerX = item.level * indentSize;\n const bodyX = markerX + markerWidth + markerGap;\n const bodyWidth = Math.max(schema.width - bodyX, 0);\n const lines = splitTextToSize({\n value: item.text,\n characterSpacing,\n boxWidthInPt: mm2pt(Math.max(bodyWidth, 0.1)),\n fontSize,\n fontKitFont,\n });\n const height =\n Math.max(lines.length, 1) * lineHeightMm + (index === items.length - 1 ? 0 : itemSpacing);\n\n return {\n item: item.text,\n itemIndex: startIndex + index,\n level: item.level,\n marker: markers[index],\n lines,\n height,\n markerX,\n bodyX,\n bodyWidth,\n };\n });\n\n return {\n items: layoutItems,\n totalHeight: layoutItems.reduce((sum, item) => sum + item.height, 0),\n markerWidth,\n markerGap,\n indentSize,\n };\n};\n","import type { DynamicLayoutArgs, DynamicLayoutResult } from '@pdfme/common';\nimport type { ListSchema } from './types.js';\nimport { calculateListLayout, normalizeListItems } from './helper.js';\n\nexport const getDynamicLayoutForList = async (\n value: string,\n args: DynamicLayoutArgs,\n): Promise<DynamicLayoutResult> => {\n if (args.schema.type !== 'list') return { heights: [args.schema.height] };\n\n const schema = args.schema as ListSchema;\n const items = normalizeListItems(value);\n if (items.length === 0) return { heights: [0] };\n\n const layout = await calculateListLayout({\n schema,\n items,\n startIndex: 0,\n options: args.options,\n _cache: args._cache,\n });\n\n return {\n heights: layout.items.map((item) => item.height),\n avoidFirstUnitOnly: false,\n patchSplitSchema: ({ start, end, isSplit }) => ({\n __itemRange: { start, end },\n __isSplit: isSplit,\n }),\n };\n};\n"],"mappings":";;;AAEA,IAAa,oBAAoB;AACjC,IAAa,qBAAqB;AAClC,IAAa,qBAAqB;;;ACelC,IAAa,sBAAsB,UAA6B;AAC9D,KAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,KAAK,SAAS,OAAO,KAAK,CAAC;AAElE,KAAI,OAAO,UAAU,SACnB,QAAO,SAAS,OAAO,EAAE,GAAG,CAAC,OAAO,MAAM,CAAC;CAG7C,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,CAAC,QAAS,QAAO,EAAE;AAEvB,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,QAAQ;AAClC,MAAI,MAAM,QAAQ,OAAO,CAAE,QAAO,OAAO,KAAK,SAAS,OAAO,KAAK,CAAC;SAC9D;AAIR,QAAO,MAAM,MAAM,cAAc;;AAGnC,IAAa,iBAAiB,UAA4B;CACxD,MAAM,SAAS,MAAM,MAAM,OAAO,GAAG,GAAG,UAAU;AAClD,QAAO;EACL,OAAO,KAAK,IAAI,QAAA,EAAyB;EACzC,MAAM,MAAM,MAAM,OAAO;EAC1B;;AAGH,IAAa,4BAA4B,UACvC,mBAAmB,MAAM,CAAC,IAAI,cAAc;AAE9C,IAAM,kBAAkB,SACtB,GAAG,IAAK,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,CAAC,GAAG,KAAK;AAEjD,IAAa,sBAAsB,UAA8B;CAC/D,MAAM,QAAQ,MAAM,IAAI,eAAe;AACvC,QAAO,KAAK,UAAU,MAAM;;AAG9B,IAAa,kBAAkB,QAAoB,UAA8B;AAC/E,MAAK,OAAO,aAAA,cAAA,UACV,QAAO,MAAM,UAAA,IAAyB;CAGxC,MAAM,WAAW,MAAM,KAAK,EAAE,QAAA,GAA8B,QAAQ,EAAE;AACtE,QAAO,MAAM,KAAK,YAAY;EAC5B,MAAM,EAAE,UAAU,cAAc,QAAQ;AACxC,WAAS,UAAU;AACnB,WAAS,KAAK,GAAG,QAAQ,EAAE;AAC3B,SAAO,GAAG,SAAS,OAAO;GAC1B;;AAGJ,IAAa,sBAAsB,OAAO,QAOf;CACzB,MAAM,EAAE,QAAQ,OAAO,aAAa,YAAY,SAAS,WAAW;CACpE,MAAM,cAAc,OAAO,eAAA;CAC3B,MAAM,YAAY,OAAO,aAAA;CACzB,MAAM,aAAa,OAAO,cAAA;CAC1B,MAAM,OAAO,QAAQ,QAAQ,gBAAgB;CAC7C,MAAM,cAAc,MAAM,eACxB,OAAO,UACP,MACA,OACD;CAED,MAAM,WAAW,OAAO,YAAA;CACxB,MAAM,aAAa,OAAO,cAAA;CAC1B,MAAM,mBAAmB,OAAO,oBAAA;CAChC,MAAM,cAAc,OAAO,eAAA;CAC3B,MAAM,eAAe,MAAM,WAAW,WAAW;CACjD,MAAM,UAAU,cACZ,eAAe,QAAQ,YAAY,CAAC,MAAM,YAAY,aAAa,MAAM,OAAO,GAChF,eAAe,QAAQ,MAAM;CAEjC,MAAM,cAAgC,MAAM,KAAK,SAAS,UAAU;EAClE,MAAM,OAAO,cAAc,QAAQ;EACnC,MAAM,UAAU,KAAK,QAAQ;EAC7B,MAAM,QAAQ,UAAU,cAAc;EACtC,MAAM,YAAY,KAAK,IAAI,OAAO,QAAQ,OAAO,EAAE;EACnD,MAAM,QAAQ,gBAAgB;GAC5B,OAAO,KAAK;GACZ;GACA,cAAc,MAAM,KAAK,IAAI,WAAW,GAAI,CAAC;GAC7C;GACA;GACD,CAAC;EACF,MAAM,SACJ,KAAK,IAAI,MAAM,QAAQ,EAAE,GAAG,gBAAgB,UAAU,MAAM,SAAS,IAAI,IAAI;AAE/E,SAAO;GACL,MAAM,KAAK;GACX,WAAW,aAAa;GACxB,OAAO,KAAK;GACZ,QAAQ,QAAQ;GAChB;GACA;GACA;GACA;GACA;GACD;GACD;AAEF,QAAO;EACL,OAAO;EACP,aAAa,YAAY,QAAQ,KAAK,SAAS,MAAM,KAAK,QAAQ,EAAE;EACpE;EACA;EACA;EACD;;;;AClIH,IAAa,0BAA0B,OACrC,OACA,SACiC;AACjC,KAAI,KAAK,OAAO,SAAS,OAAQ,QAAO,EAAE,SAAS,CAAC,KAAK,OAAO,OAAO,EAAE;CAEzE,MAAM,SAAS,KAAK;CACpB,MAAM,QAAQ,mBAAmB,MAAM;AACvC,KAAI,MAAM,WAAW,EAAG,QAAO,EAAE,SAAS,CAAC,EAAE,EAAE;AAU/C,QAAO;EACL,UAAS,MATU,oBAAoB;GACvC;GACA;GACA,YAAY;GACZ,SAAS,KAAK;GACd,QAAQ,KAAK;GACd,CAAC,EAGgB,MAAM,KAAK,SAAS,KAAK,OAAO;EAChD,oBAAoB;EACpB,mBAAmB,EAAE,OAAO,KAAK,eAAe;GAC9C,aAAa;IAAE;IAAO;IAAK;GAC3B,WAAW;GACZ;EACF"}
@@ -0,0 +1,3 @@
1
+ export { getDynamicLayoutForList } from './list/dynamicTemplate.js';
2
+ export { normalizeListItems, normalizeListItemEntries, serializeListItems, getListMarkers, calculateListLayout, } from './list/helper.js';
3
+ export type { ListItem, ListSchema, ListLayout, ListItemLayout, ListRange, LIST_STYLE, } from './list/types.js';
package/dist/lists.js ADDED
@@ -0,0 +1,2 @@
1
+ import { a as normalizeListItems, i as normalizeListItemEntries, n as calculateListLayout, o as serializeListItems, r as getListMarkers, t as getDynamicLayoutForList } from "./lists-B6dmgpkS.js";
2
+ export { calculateListLayout, getDynamicLayoutForList, getListMarkers, normalizeListItemEntries, normalizeListItems, serializeListItems };
@@ -1,3 +1,4 @@
1
1
  import { MultiVariableTextSchema } from './types.js';
2
- export declare const substituteVariables: (text: string, variablesIn: string | Record<string, string>) => string;
2
+ export declare const substituteVariables: (text: string, variablesIn: string | Record<string, string>, valueMapper?: (value: string, variableName: string) => string) => string;
3
+ export declare const substituteVariablesAsInlineMarkdownLiterals: (text: string, variablesIn: string | Record<string, string>) => string;
3
4
  export declare const validateVariables: (value: string, schema: MultiVariableTextSchema) => boolean;
@@ -1,7 +1,8 @@
1
- import { Schema, BasePdf, CommonOptions } from '@pdfme/common';
1
+ import { Schema, BasePdf, CommonOptions, DynamicLayoutArgs, DynamicLayoutResult } from '@pdfme/common';
2
2
  export declare const getDynamicHeightsForTable: (value: string, args: {
3
3
  schema: Schema;
4
4
  basePdf: BasePdf;
5
5
  options: CommonOptions;
6
6
  _cache: Map<string | number, unknown>;
7
7
  }) => Promise<number[]>;
8
+ export declare const getDynamicLayoutForTable: (value: string, args: DynamicLayoutArgs) => Promise<DynamicLayoutResult>;
package/dist/tables.d.ts CHANGED
@@ -1 +1 @@
1
- export { getDynamicHeightsForTable } from './tables/dynamicTemplate.js';
1
+ export { getDynamicHeightsForTable, getDynamicLayoutForTable } from './tables/dynamicTemplate.js';
package/dist/tables.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as getDynamicHeightsForTable } from "./dynamicTemplate-DxHU9waC.js";
2
- export { getDynamicHeightsForTable };
1
+ import { n as getDynamicLayoutForTable, t as getDynamicHeightsForTable } from "./dynamicTemplate-DmuRoTw4.js";
2
+ export { getDynamicHeightsForTable, getDynamicLayoutForTable };
@@ -13,6 +13,19 @@ export declare const DEFAULT_LINE_HEIGHT = 1;
13
13
  export declare const DEFAULT_CHARACTER_SPACING = 0;
14
14
  export declare const DEFAULT_FONT_COLOR = "#000000";
15
15
  export declare const PLACEHOLDER_FONT_COLOR = "#A0A0A0";
16
+ export declare const TEXT_FORMAT_PLAIN: "plain";
17
+ export declare const TEXT_FORMAT_INLINE_MARKDOWN: "inline-markdown";
18
+ export declare const DEFAULT_TEXT_FORMAT: "plain";
19
+ export declare const FONT_VARIANT_FALLBACK_SYNTHETIC: "synthetic";
20
+ export declare const FONT_VARIANT_FALLBACK_PLAIN: "plain";
21
+ export declare const FONT_VARIANT_FALLBACK_ERROR: "error";
22
+ export declare const DEFAULT_FONT_VARIANT_FALLBACK: "synthetic";
23
+ export declare const SYNTHETIC_BOLD_OFFSET_RATIO = 0.03;
24
+ export declare const SYNTHETIC_BOLD_PDF_EXTRA_DRAWS = 2;
25
+ export declare const SYNTHETIC_BOLD_CSS_TEXT_SHADOW = "0.025em 0 0 currentColor";
26
+ export declare const SYNTHETIC_ITALIC_SKEW_DEGREES = 12;
27
+ export declare const CODE_BACKGROUND_COLOR = "#f2f3f5";
28
+ export declare const CODE_HORIZONTAL_PADDING = 1.5;
16
29
  export declare const DYNAMIC_FIT_VERTICAL: DYNAMIC_FONT_SIZE_FIT;
17
30
  export declare const DYNAMIC_FIT_HORIZONTAL: DYNAMIC_FONT_SIZE_FIT;
18
31
  export declare const DEFAULT_DYNAMIC_FIT: DYNAMIC_FONT_SIZE_FIT;
@@ -0,0 +1,4 @@
1
+ import type { RichTextRun } from './types.js';
2
+ export declare const parseInlineMarkdown: (value: string) => RichTextRun[];
3
+ export declare const escapeInlineMarkdown: (value: string) => string;
4
+ export declare const stripInlineMarkdown: (value: string) => string;
@@ -0,0 +1,46 @@
1
+ import { type Font } from '@pdfme/common';
2
+ import type { Font as FontKitFont } from 'fontkit';
3
+ import type { RichTextRun, TextSchema } from './types.js';
4
+ export type ResolvedRichTextRun = RichTextRun & {
5
+ fontName: string;
6
+ fontKitFont: FontKitFont;
7
+ syntheticBold: boolean;
8
+ syntheticItalic: boolean;
9
+ };
10
+ export type RichTextLineRun = ResolvedRichTextRun & {
11
+ width: number;
12
+ };
13
+ export type RichTextLine = {
14
+ runs: RichTextLineRun[];
15
+ width: number;
16
+ hardBreak: boolean;
17
+ };
18
+ type FontVariantResolution = {
19
+ fontName: string;
20
+ syntheticBold: boolean;
21
+ syntheticItalic: boolean;
22
+ };
23
+ export declare const isInlineMarkdownTextSchema: (schema: TextSchema) => boolean;
24
+ export declare const resolveFontVariant: (run: RichTextRun, schema: TextSchema, font: Font) => FontVariantResolution;
25
+ export declare const resolveRichTextRuns: (arg: {
26
+ runs: RichTextRun[];
27
+ schema: TextSchema;
28
+ font: Font;
29
+ _cache: Map<string | number, unknown>;
30
+ }) => Promise<ResolvedRichTextRun[]>;
31
+ export declare const countRichTextLineGraphemes: (line: RichTextLine) => number;
32
+ export declare const getRichTextLineText: (line: RichTextLine) => string;
33
+ export declare const layoutRichTextLines: (arg: {
34
+ runs: ResolvedRichTextRun[];
35
+ fontSize: number;
36
+ characterSpacing: number;
37
+ boxWidthInPt: number;
38
+ }) => RichTextLine[];
39
+ export declare const calculateDynamicRichTextFontSize: (arg: {
40
+ value: string;
41
+ schema: TextSchema;
42
+ font: Font;
43
+ _cache: Map<string | number, unknown>;
44
+ startingFontSize?: number | undefined;
45
+ }) => Promise<number>;
46
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { PDFFont, Rotation } from '@pdfme/pdf-lib';
2
+ import type { ColorType, Font, PDFRenderProps } from '@pdfme/common';
3
+ import type { Font as FontKitFont } from 'fontkit';
4
+ import type { TextSchema } from './types.js';
5
+ import { hex2PrintingColor } from '../utils.js';
6
+ type TextColor = ReturnType<typeof hex2PrintingColor>;
7
+ export declare const renderInlineMarkdownText: (arg: {
8
+ value: string;
9
+ schema: TextSchema;
10
+ font: Font;
11
+ pdfFontObj: Record<string, PDFFont>;
12
+ fontKitFont: FontKitFont;
13
+ page: PDFRenderProps<TextSchema>["page"];
14
+ pdfLib: PDFRenderProps<TextSchema>["pdfLib"];
15
+ _cache: Map<string | number, unknown>;
16
+ colorType: ColorType;
17
+ fontSize: number;
18
+ color: TextColor;
19
+ alignment: string;
20
+ verticalAlignment: string;
21
+ lineHeight: number;
22
+ characterSpacing: number;
23
+ x: number;
24
+ width: number;
25
+ height: number;
26
+ pageHeight: number;
27
+ pivotPoint: {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ rotate: Rotation;
32
+ opacity: number | undefined;
33
+ }) => Promise<void>;
34
+ export {};
@@ -3,6 +3,21 @@ import type { Font as FontKitFont } from 'fontkit';
3
3
  export type ALIGNMENT = 'left' | 'center' | 'right' | 'justify';
4
4
  export type VERTICAL_ALIGNMENT = 'top' | 'middle' | 'bottom';
5
5
  export type DYNAMIC_FONT_SIZE_FIT = 'horizontal' | 'vertical';
6
+ export type TEXT_FORMAT = 'plain' | 'inline-markdown';
7
+ export type FONT_VARIANT_FALLBACK = 'synthetic' | 'plain' | 'error';
8
+ export type FontVariants = {
9
+ bold?: string;
10
+ italic?: string;
11
+ boldItalic?: string;
12
+ code?: string;
13
+ };
14
+ export type RichTextRun = {
15
+ text: string;
16
+ bold?: boolean;
17
+ italic?: boolean;
18
+ strikethrough?: boolean;
19
+ code?: boolean;
20
+ };
6
21
  export type FontWidthCalcValues = {
7
22
  font: FontKitFont;
8
23
  fontSize: number;
@@ -11,6 +26,9 @@ export type FontWidthCalcValues = {
11
26
  };
12
27
  export type TextSchema = Schema & {
13
28
  fontName?: string;
29
+ textFormat?: TEXT_FORMAT;
30
+ fontVariants?: FontVariants;
31
+ fontVariantFallback?: FONT_VARIANT_FALLBACK;
14
32
  alignment: ALIGNMENT;
15
33
  verticalAlignment: VERTICAL_ALIGNMENT;
16
34
  fontSize: number;
@@ -2,7 +2,7 @@ import type { Font as FontKitFont } from 'fontkit';
2
2
  import { UIRenderProps } from '@pdfme/common';
3
3
  import type { TextSchema } from './types.js';
4
4
  export declare const uiRender: (arg: UIRenderProps<TextSchema>) => Promise<void>;
5
- export declare const buildStyledTextContainer: (arg: UIRenderProps<TextSchema>, fontKitFont: FontKitFont, value: string) => HTMLDivElement;
5
+ export declare const buildStyledTextContainer: (arg: UIRenderProps<TextSchema>, fontKitFont: FontKitFont, value: string, resolvedDynamicFontSize?: number) => HTMLDivElement;
6
6
  /**
7
7
  * Firefox doesn't support 'plaintext-only' contentEditable mode, which we want to avoid mark-up.
8
8
  * This function adds a workaround for Firefox to make the contentEditable element behave like 'plaintext-only'.
package/dist/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as getDynamicHeightsForTable$1 } from "./dynamicTemplate-DxHU9waC.js";
1
+ import { t as getDynamicHeightsForTable$1 } from "./dynamicTemplate-DmuRoTw4.js";
2
2
  import { isHexValid, mm2pt } from "@pdfme/common";
3
3
  import { cmyk, degrees, degreesToRadians, rgb } from "@pdfme/pdf-lib";
4
4
  //#region src/utils.ts
@@ -78,7 +78,7 @@ var hex2CmykColor = (hexString) => {
78
78
  g = g * opacity + (1 - opacity);
79
79
  b = b * opacity + (1 - opacity);
80
80
  const k = 1 - Math.max(r, g, b);
81
- return cmyk(r === 0 ? 0 : (1 - r - k) / (1 - k), g === 0 ? 0 : (1 - g - k) / (1 - k), b === 0 ? 0 : (1 - b - k) / (1 - k), k);
81
+ return cmyk(k === 1 ? 0 : (1 - r - k) / (1 - k), k === 1 ? 0 : (1 - g - k) / (1 - k), k === 1 ? 0 : (1 - b - k) / (1 - k), k);
82
82
  }
83
83
  };
84
84
  var hex2PrintingColor = (color, colorType) => {
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type * as CSS from 'csstype';\nimport { cmyk, degrees, degreesToRadians, rgb, Color } from '@pdfme/pdf-lib';\nimport { Schema, mm2pt, Mode, isHexValid, ColorType } from '@pdfme/common';\nimport { IconNode } from 'lucide';\nimport { getDynamicHeightsForTable as _getDynamicHeightsForTable } from './tables/dynamicTemplate.js';\nexport const convertForPdfLayoutProps = ({\n schema,\n pageHeight,\n applyRotateTranslate = true,\n}: {\n schema: Schema;\n pageHeight: number;\n applyRotateTranslate?: boolean;\n}) => {\n const { width: mmWidth, height: mmHeight, position, rotate, opacity } = schema;\n const { x: mmX, y: mmY } = position;\n\n const rotateDegrees = rotate ? -rotate : 0;\n const width = mm2pt(mmWidth);\n const height = mm2pt(mmHeight);\n let x = mm2pt(mmX);\n // PDF coordinate system is from bottom left, UI is top left, so we need to flip the y axis\n let y = pageHeight - mm2pt(mmY) - height;\n\n if (rotateDegrees && applyRotateTranslate) {\n // If rotating we must pivot around the same point as the UI performs its rotation.\n // The UI performs rotation around the objects center point (the pivot point below),\n // pdflib rotates around the bottom left corner of the object.\n // We must therefore adjust the X and Y by rotating the bottom left corner by this pivot point.\n const pivotPoint = { x: x + width / 2, y: pageHeight - mm2pt(mmY) - height / 2 };\n const rotatedPoint = rotatePoint({ x, y }, pivotPoint, rotateDegrees);\n x = rotatedPoint.x;\n y = rotatedPoint.y;\n }\n\n return {\n position: { x, y },\n height: height,\n width: width,\n rotate: degrees(rotateDegrees),\n opacity,\n };\n};\n\nexport const rotatePoint = (\n point: { x: number; y: number },\n pivot: { x: number; y: number },\n angleDegrees: number,\n): { x: number; y: number } => {\n const angleRadians = degreesToRadians(angleDegrees);\n\n const x =\n Math.cos(angleRadians) * (point.x - pivot.x) -\n Math.sin(angleRadians) * (point.y - pivot.y) +\n pivot.x;\n const y =\n Math.sin(angleRadians) * (point.x - pivot.x) +\n Math.cos(angleRadians) * (point.y - pivot.y) +\n pivot.y;\n\n return { x, y };\n};\n\nexport const getDynamicHeightsForTable = _getDynamicHeightsForTable;\n\n// ----------------------------------------\n\nexport const addAlphaToHex = (hex: string, alphaPercentage: number) => {\n if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i.test(hex)) {\n throw new Error('Invalid HEX color code');\n }\n const alphaValue = Math.round((alphaPercentage / 100) * 255);\n let alphaHex = alphaValue.toString(16);\n if (alphaHex.length === 1) alphaHex = '0' + alphaHex;\n return hex + alphaHex;\n};\n\nexport const isEditable = (mode: Mode, schema: Schema) =>\n mode === 'designer' || (mode === 'form' && schema.readOnly !== true);\n\nconst hex2rgb = (hex: string) => {\n if (hex.slice(0, 1) === '#') hex = hex.slice(1);\n if (hex.length === 3)\n hex =\n hex.slice(0, 1) +\n hex.slice(0, 1) +\n hex.slice(1, 2) +\n hex.slice(1, 2) +\n hex.slice(2, 3) +\n hex.slice(2, 3);\n\n return [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)].map((str) => parseInt(str, 16));\n};\n\nexport const hex2RgbColor = (hexString: string | undefined) => {\n if (hexString) {\n const isValid = isHexValid(hexString);\n\n if (!isValid) {\n throw new Error(`Invalid hex color value ${hexString}`);\n }\n\n const [r, g, b] = hex2rgb(hexString);\n\n return rgb(r / 255, g / 255, b / 255);\n }\n\n return undefined;\n};\n\nconst hex2CmykColor = (hexString: string | undefined) => {\n if (hexString) {\n const isValid = isHexValid(hexString);\n\n if (!isValid) {\n throw new Error(`Invalid hex color value ${hexString}`);\n }\n\n // Remove the # if it's present\n hexString = hexString.replace('#', '');\n\n // Extract the hexadecimal color code and the opacity\n const hexColor = hexString.substring(0, 6);\n const opacityColor = hexString.substring(6, 8);\n const opacity = opacityColor ? parseInt(opacityColor, 16) / 255 : 1;\n\n // Convert the hex values to decimal\n let r = parseInt(hexColor.substring(0, 2), 16) / 255;\n let g = parseInt(hexColor.substring(2, 4), 16) / 255;\n let b = parseInt(hexColor.substring(4, 6), 16) / 255;\n\n // Apply the opacity\n r = r * opacity + (1 - opacity);\n g = g * opacity + (1 - opacity);\n b = b * opacity + (1 - opacity);\n\n // Calculate the CMYK values\n const k = 1 - Math.max(r, g, b);\n const c = r === 0 ? 0 : (1 - r - k) / (1 - k);\n const m = g === 0 ? 0 : (1 - g - k) / (1 - k);\n const y = b === 0 ? 0 : (1 - b - k) / (1 - k);\n\n return cmyk(c, m, y, k);\n }\n\n return undefined;\n};\n\nexport const hex2PrintingColor = (color?: string | Color, colorType?: ColorType) => {\n // if color is already CMYK, RGB or Grayscale, does not required to convert\n if (typeof color === 'object') return color;\n return colorType?.toLowerCase() == 'cmyk' ? hex2CmykColor(color) : hex2RgbColor(color);\n};\n\nexport const readFile = (input: File | FileList | null): Promise<string | ArrayBuffer> =>\n new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n\n fileReader.onload = (e) => {\n if (e.target?.result) {\n resolve(e.target.result);\n }\n };\n\n fileReader.onerror = () => {\n reject(new Error('[@pdfme/schemas] File reading failed'));\n };\n\n let file: File | null = null;\n if (input instanceof FileList && input.length > 0) {\n file = input[0];\n } else if (input instanceof File) {\n file = input;\n }\n\n if (file) {\n fileReader.readAsDataURL(file);\n } else {\n reject(new Error('[@pdfme/schemas] No files provided'));\n }\n });\n\nexport const createErrorElm = () => {\n const container = document.createElement('div');\n const containerStyle: CSS.Properties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n };\n Object.assign(container.style, containerStyle);\n\n const span = document.createElement('span');\n const spanStyle: CSS.Properties = {\n color: 'white',\n background: 'red',\n padding: '0.25rem',\n fontSize: '12pt',\n fontWeight: 'bold',\n borderRadius: '2px',\n fontFamily: \"'Open Sans', sans-serif\",\n };\n Object.assign(span.style, spanStyle);\n\n span.textContent = 'ERROR';\n container.appendChild(span);\n\n return container;\n};\n\nexport const createSvgStr = (icon: IconNode, attrs?: Record<string, string>): string => {\n // In lucide 0.475.0, the icon is an array of elements, not a single SVG element\n // We need to create an SVG wrapper and add the elements as children\n\n const safeTagNames = new Set([\n 'svg',\n 'circle',\n 'ellipse',\n 'g',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n ]);\n const safeAttributeNames = new Set([\n 'aria-hidden',\n 'aria-label',\n 'class',\n 'clip-rule',\n 'cx',\n 'cy',\n 'd',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'focusable',\n 'height',\n 'id',\n 'opacity',\n 'points',\n 'preserveAspectRatio',\n 'r',\n 'role',\n 'rx',\n 'ry',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'transform',\n 'vector-effect',\n 'viewBox',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'xmlns:xlink',\n 'y',\n 'y1',\n 'y2',\n ]);\n const escapeHtmlAttribute = (value: string): string =>\n value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;');\n const escapeHtmlText = (value: string): string =>\n value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n const toSafeAttributeString = (attributes: Record<string, string>): string =>\n Object.entries(attributes)\n .filter(\n ([key, value]) =>\n safeAttributeNames.has(key) &&\n value !== undefined &&\n value !== null &&\n !key.toLowerCase().startsWith('on'),\n )\n .map(([key, value]) => `${key}=\"${escapeHtmlAttribute(String(value))}\"`)\n .join(' ');\n const toSafeTagName = (tag: unknown): string => {\n const tagName = String(tag);\n if (!safeTagNames.has(tagName)) {\n throw new Error(`Invalid SVG tag name: ${tagName}`);\n }\n return tagName;\n };\n\n // Handle non-array input\n if (!Array.isArray(icon)) {\n return escapeHtmlText(String(icon));\n }\n\n // Create default SVG attributes\n const svgAttrs = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '24',\n height: '24',\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n ...attrs,\n };\n const svgAttrString = toSafeAttributeString(svgAttrs);\n\n // Helper function to process a single element\n const processElement = (element: unknown): string => {\n if (!Array.isArray(element)) {\n return escapeHtmlText(String(element));\n }\n\n const [tag, attributes = {}, children = []] = element as [\n unknown,\n Record<string, string>,\n unknown[],\n ];\n const tagName = toSafeTagName(tag);\n const attrString = toSafeAttributeString(attributes);\n\n // Process children recursively\n let childrenString = '';\n\n if (Array.isArray(children) && children.length > 0) {\n childrenString = children.map((child) => processElement(child)).join('');\n }\n\n // Return properly formatted element string\n if (childrenString) {\n return `<${String(tagName)}${attrString ? ' ' + String(attrString) : ''}>${childrenString}</${String(tagName)}>`;\n } else {\n // Self-closing tag for empty children\n return `<${String(tagName)}${attrString ? ' ' + String(attrString) : ''}/>`;\n }\n };\n\n // Process all elements and join them\n const elementsString = Array.isArray(icon)\n ? icon.map((element) => processElement(element)).join('')\n : processElement(icon);\n\n // Return the complete SVG string\n return `<svg ${svgAttrString}>${elementsString}</svg>`;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type * as CSS from 'csstype';\nimport { cmyk, degrees, degreesToRadians, rgb, Color } from '@pdfme/pdf-lib';\nimport { Schema, mm2pt, Mode, isHexValid, ColorType } from '@pdfme/common';\nimport { IconNode } from 'lucide';\nimport { getDynamicHeightsForTable as _getDynamicHeightsForTable } from './tables/dynamicTemplate.js';\nexport const convertForPdfLayoutProps = ({\n schema,\n pageHeight,\n applyRotateTranslate = true,\n}: {\n schema: Schema;\n pageHeight: number;\n applyRotateTranslate?: boolean;\n}) => {\n const { width: mmWidth, height: mmHeight, position, rotate, opacity } = schema;\n const { x: mmX, y: mmY } = position;\n\n const rotateDegrees = rotate ? -rotate : 0;\n const width = mm2pt(mmWidth);\n const height = mm2pt(mmHeight);\n let x = mm2pt(mmX);\n // PDF coordinate system is from bottom left, UI is top left, so we need to flip the y axis\n let y = pageHeight - mm2pt(mmY) - height;\n\n if (rotateDegrees && applyRotateTranslate) {\n // If rotating we must pivot around the same point as the UI performs its rotation.\n // The UI performs rotation around the objects center point (the pivot point below),\n // pdflib rotates around the bottom left corner of the object.\n // We must therefore adjust the X and Y by rotating the bottom left corner by this pivot point.\n const pivotPoint = { x: x + width / 2, y: pageHeight - mm2pt(mmY) - height / 2 };\n const rotatedPoint = rotatePoint({ x, y }, pivotPoint, rotateDegrees);\n x = rotatedPoint.x;\n y = rotatedPoint.y;\n }\n\n return {\n position: { x, y },\n height: height,\n width: width,\n rotate: degrees(rotateDegrees),\n opacity,\n };\n};\n\nexport const rotatePoint = (\n point: { x: number; y: number },\n pivot: { x: number; y: number },\n angleDegrees: number,\n): { x: number; y: number } => {\n const angleRadians = degreesToRadians(angleDegrees);\n\n const x =\n Math.cos(angleRadians) * (point.x - pivot.x) -\n Math.sin(angleRadians) * (point.y - pivot.y) +\n pivot.x;\n const y =\n Math.sin(angleRadians) * (point.x - pivot.x) +\n Math.cos(angleRadians) * (point.y - pivot.y) +\n pivot.y;\n\n return { x, y };\n};\n\nexport const getDynamicHeightsForTable = _getDynamicHeightsForTable;\n\n// ----------------------------------------\n\nexport const addAlphaToHex = (hex: string, alphaPercentage: number) => {\n if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i.test(hex)) {\n throw new Error('Invalid HEX color code');\n }\n const alphaValue = Math.round((alphaPercentage / 100) * 255);\n let alphaHex = alphaValue.toString(16);\n if (alphaHex.length === 1) alphaHex = '0' + alphaHex;\n return hex + alphaHex;\n};\n\nexport const isEditable = (mode: Mode, schema: Schema) =>\n mode === 'designer' || (mode === 'form' && schema.readOnly !== true);\n\nconst hex2rgb = (hex: string) => {\n if (hex.slice(0, 1) === '#') hex = hex.slice(1);\n if (hex.length === 3)\n hex =\n hex.slice(0, 1) +\n hex.slice(0, 1) +\n hex.slice(1, 2) +\n hex.slice(1, 2) +\n hex.slice(2, 3) +\n hex.slice(2, 3);\n\n return [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)].map((str) => parseInt(str, 16));\n};\n\nexport const hex2RgbColor = (hexString: string | undefined) => {\n if (hexString) {\n const isValid = isHexValid(hexString);\n\n if (!isValid) {\n throw new Error(`Invalid hex color value ${hexString}`);\n }\n\n const [r, g, b] = hex2rgb(hexString);\n\n return rgb(r / 255, g / 255, b / 255);\n }\n\n return undefined;\n};\n\nconst hex2CmykColor = (hexString: string | undefined) => {\n if (hexString) {\n const isValid = isHexValid(hexString);\n\n if (!isValid) {\n throw new Error(`Invalid hex color value ${hexString}`);\n }\n\n // Remove the # if it's present\n hexString = hexString.replace('#', '');\n\n // Extract the hexadecimal color code and the opacity\n const hexColor = hexString.substring(0, 6);\n const opacityColor = hexString.substring(6, 8);\n const opacity = opacityColor ? parseInt(opacityColor, 16) / 255 : 1;\n\n // Convert the hex values to decimal\n let r = parseInt(hexColor.substring(0, 2), 16) / 255;\n let g = parseInt(hexColor.substring(2, 4), 16) / 255;\n let b = parseInt(hexColor.substring(4, 6), 16) / 255;\n\n // Apply the opacity\n r = r * opacity + (1 - opacity);\n g = g * opacity + (1 - opacity);\n b = b * opacity + (1 - opacity);\n\n // Calculate the CMYK values\n const k = 1 - Math.max(r, g, b);\n const c = k === 1 ? 0 : (1 - r - k) / (1 - k);\n const m = k === 1 ? 0 : (1 - g - k) / (1 - k);\n const y = k === 1 ? 0 : (1 - b - k) / (1 - k);\n\n return cmyk(c, m, y, k);\n }\n\n return undefined;\n};\n\nexport const hex2PrintingColor = (color?: string | Color, colorType?: ColorType) => {\n // if color is already CMYK, RGB or Grayscale, does not required to convert\n if (typeof color === 'object') return color;\n return colorType?.toLowerCase() == 'cmyk' ? hex2CmykColor(color) : hex2RgbColor(color);\n};\n\nexport const readFile = (input: File | FileList | null): Promise<string | ArrayBuffer> =>\n new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n\n fileReader.onload = (e) => {\n if (e.target?.result) {\n resolve(e.target.result);\n }\n };\n\n fileReader.onerror = () => {\n reject(new Error('[@pdfme/schemas] File reading failed'));\n };\n\n let file: File | null = null;\n if (input instanceof FileList && input.length > 0) {\n file = input[0];\n } else if (input instanceof File) {\n file = input;\n }\n\n if (file) {\n fileReader.readAsDataURL(file);\n } else {\n reject(new Error('[@pdfme/schemas] No files provided'));\n }\n });\n\nexport const createErrorElm = () => {\n const container = document.createElement('div');\n const containerStyle: CSS.Properties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n };\n Object.assign(container.style, containerStyle);\n\n const span = document.createElement('span');\n const spanStyle: CSS.Properties = {\n color: 'white',\n background: 'red',\n padding: '0.25rem',\n fontSize: '12pt',\n fontWeight: 'bold',\n borderRadius: '2px',\n fontFamily: \"'Open Sans', sans-serif\",\n };\n Object.assign(span.style, spanStyle);\n\n span.textContent = 'ERROR';\n container.appendChild(span);\n\n return container;\n};\n\nexport const createSvgStr = (icon: IconNode, attrs?: Record<string, string>): string => {\n // In lucide 0.475.0, the icon is an array of elements, not a single SVG element\n // We need to create an SVG wrapper and add the elements as children\n\n const safeTagNames = new Set([\n 'svg',\n 'circle',\n 'ellipse',\n 'g',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n ]);\n const safeAttributeNames = new Set([\n 'aria-hidden',\n 'aria-label',\n 'class',\n 'clip-rule',\n 'cx',\n 'cy',\n 'd',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'focusable',\n 'height',\n 'id',\n 'opacity',\n 'points',\n 'preserveAspectRatio',\n 'r',\n 'role',\n 'rx',\n 'ry',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'transform',\n 'vector-effect',\n 'viewBox',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'xmlns:xlink',\n 'y',\n 'y1',\n 'y2',\n ]);\n const escapeHtmlAttribute = (value: string): string =>\n value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;');\n const escapeHtmlText = (value: string): string =>\n value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n const toSafeAttributeString = (attributes: Record<string, string>): string =>\n Object.entries(attributes)\n .filter(\n ([key, value]) =>\n safeAttributeNames.has(key) &&\n value !== undefined &&\n value !== null &&\n !key.toLowerCase().startsWith('on'),\n )\n .map(([key, value]) => `${key}=\"${escapeHtmlAttribute(String(value))}\"`)\n .join(' ');\n const toSafeTagName = (tag: unknown): string => {\n const tagName = String(tag);\n if (!safeTagNames.has(tagName)) {\n throw new Error(`Invalid SVG tag name: ${tagName}`);\n }\n return tagName;\n };\n\n // Handle non-array input\n if (!Array.isArray(icon)) {\n return escapeHtmlText(String(icon));\n }\n\n // Create default SVG attributes\n const svgAttrs = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '24',\n height: '24',\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n ...attrs,\n };\n const svgAttrString = toSafeAttributeString(svgAttrs);\n\n // Helper function to process a single element\n const processElement = (element: unknown): string => {\n if (!Array.isArray(element)) {\n return escapeHtmlText(String(element));\n }\n\n const [tag, attributes = {}, children = []] = element as [\n unknown,\n Record<string, string>,\n unknown[],\n ];\n const tagName = toSafeTagName(tag);\n const attrString = toSafeAttributeString(attributes);\n\n // Process children recursively\n let childrenString = '';\n\n if (Array.isArray(children) && children.length > 0) {\n childrenString = children.map((child) => processElement(child)).join('');\n }\n\n // Return properly formatted element string\n if (childrenString) {\n return `<${String(tagName)}${attrString ? ' ' + String(attrString) : ''}>${childrenString}</${String(tagName)}>`;\n } else {\n // Self-closing tag for empty children\n return `<${String(tagName)}${attrString ? ' ' + String(attrString) : ''}/>`;\n }\n };\n\n // Process all elements and join them\n const elementsString = Array.isArray(icon)\n ? icon.map((element) => processElement(element)).join('')\n : processElement(icon);\n\n // Return the complete SVG string\n return `<svg ${svgAttrString}>${elementsString}</svg>`;\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/schemas",
3
- "version": "6.0.6-dev.9",
3
+ "version": "6.1.0-dev.2",
4
4
  "description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
5
5
  "keywords": [
6
6
  "pdf",
@@ -45,6 +45,11 @@
45
45
  "import": "./dist/tables.js",
46
46
  "default": "./dist/tables.js"
47
47
  },
48
+ "./lists": {
49
+ "types": "./dist/lists.d.ts",
50
+ "import": "./dist/lists.js",
51
+ "default": "./dist/lists.js"
52
+ },
48
53
  "./utils": {
49
54
  "types": "./dist/utils.d.ts",
50
55
  "import": "./dist/utils.js",
@@ -69,7 +74,7 @@
69
74
  "date-fns": "^4.1.0",
70
75
  "dompurify": "^3.4.1",
71
76
  "fontkit": "^2.0.2",
72
- "lucide": "^1.9.0",
77
+ "lucide": "^1.12.0",
73
78
  "signature_pad": "^5.1.3"
74
79
  },
75
80
  "devDependencies": {