@pdfme/schemas 6.0.6-dev.9 → 6.1.0
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/builtins-C0BvXHWr.js +1388 -0
- package/dist/builtins-C0BvXHWr.js.map +1 -0
- package/dist/builtins.js +1 -1
- package/dist/{dynamicTemplate-DxHU9waC.js → dynamicTemplate-Dsrw11aL.js} +13 -2
- package/dist/dynamicTemplate-Dsrw11aL.js.map +1 -0
- package/dist/index.js +147 -19
- package/dist/index.js.map +1 -1
- package/dist/multiVariableText/helper.d.ts +2 -1
- package/dist/tables.js +1 -1
- package/dist/text/constants.d.ts +13 -0
- package/dist/text/inlineMarkdown.d.ts +4 -0
- package/dist/text/richText.d.ts +46 -0
- package/dist/text/richTextPdfRender.d.ts +34 -0
- package/dist/text/types.d.ts +18 -0
- package/dist/text/uiRender.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/dist/builtins-KUsYW25j.js +0 -613
- package/dist/builtins-KUsYW25j.js.map +0 -1
- package/dist/dynamicTemplate-DxHU9waC.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { MultiVariableTextSchema } from './types.js';
|
|
2
|
-
export declare const substituteVariables: (text: string, variablesIn: string | Record<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;
|
package/dist/tables.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as getDynamicHeightsForTable } from "./dynamicTemplate-
|
|
1
|
+
import { t as getDynamicHeightsForTable } from "./dynamicTemplate-Dsrw11aL.js";
|
|
2
2
|
export { getDynamicHeightsForTable };
|
package/dist/text/constants.d.ts
CHANGED
|
@@ -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,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 {};
|
package/dist/text/types.d.ts
CHANGED
|
@@ -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;
|
package/dist/text/uiRender.d.ts
CHANGED
|
@@ -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-
|
|
1
|
+
import { t as getDynamicHeightsForTable$1 } from "./dynamicTemplate-Dsrw11aL.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(
|
|
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('&', '&')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", ''')\n .replaceAll('<', '<')\n .replaceAll('>', '>');\n const escapeHtmlText = (value: string): string =>\n value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\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('&', '&')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", ''')\n .replaceAll('<', '<')\n .replaceAll('>', '>');\n const escapeHtmlText = (value: string): string =>\n value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\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
|
|
3
|
+
"version": "6.1.0",
|
|
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",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"date-fns": "^4.1.0",
|
|
70
70
|
"dompurify": "^3.4.1",
|
|
71
71
|
"fontkit": "^2.0.2",
|
|
72
|
-
"lucide": "^1.
|
|
72
|
+
"lucide": "^1.12.0",
|
|
73
73
|
"signature_pad": "^5.1.3"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|