@pdfme/schemas 6.1.12-dev.7 → 6.1.13

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.
@@ -1,8 +1,8 @@
1
1
  import { type DynamicLayoutRange, type DynamicLayoutSplitRange, type Schema } from '@pdfme/common';
2
2
  export declare const BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS: {
3
- readonly tableBody: "tableBody";
4
- readonly listItem: "listItem";
5
- readonly textLine: "textLine";
3
+ readonly tableBody: 'tableBody';
4
+ readonly listItem: 'listItem';
5
+ readonly textLine: 'textLine';
6
6
  };
7
7
  export type BuiltInDynamicLayoutSplitUnit = (typeof BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS)[keyof typeof BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS];
8
8
  export declare const TABLE_BODY_SPLIT_UNIT: "tableBody";
@@ -19,40 +19,6 @@ export declare const getCellPropPanelSchema: (arg: {
19
19
  fontNames: string[];
20
20
  isBody?: boolean;
21
21
  }) => {
22
- '-': {
23
- type: string;
24
- widget: string;
25
- };
26
- borderWidth: {
27
- title: string;
28
- type: string;
29
- widget: string;
30
- span: number;
31
- properties: Record<string, import("@pdfme/common").PropPanelSchema>;
32
- };
33
- '--': {
34
- type: string;
35
- widget: string;
36
- };
37
- padding: {
38
- title: string;
39
- type: string;
40
- widget: string;
41
- span: number;
42
- properties: Record<string, import("@pdfme/common").PropPanelSchema>;
43
- };
44
- alternateBackgroundColor?: {
45
- title: string;
46
- type: string;
47
- widget: string;
48
- props: {
49
- disabledAlpha: boolean;
50
- };
51
- rules: {
52
- pattern: string;
53
- message: string;
54
- }[];
55
- } | undefined;
56
22
  fontName: {
57
23
  title: string;
58
24
  type: string;
@@ -155,6 +121,40 @@ export declare const getCellPropPanelSchema: (arg: {
155
121
  message: string;
156
122
  }[];
157
123
  };
124
+ alternateBackgroundColor?: {
125
+ title: string;
126
+ type: string;
127
+ widget: string;
128
+ props: {
129
+ disabledAlpha: boolean;
130
+ };
131
+ rules: {
132
+ pattern: string;
133
+ message: string;
134
+ }[];
135
+ } | undefined;
136
+ '-': {
137
+ type: string;
138
+ widget: string;
139
+ };
140
+ borderWidth: {
141
+ title: string;
142
+ type: string;
143
+ widget: string;
144
+ span: number;
145
+ properties: Record<string, import("@pdfme/common").PropPanelSchema>;
146
+ };
147
+ '--': {
148
+ type: string;
149
+ widget: string;
150
+ };
151
+ padding: {
152
+ title: string;
153
+ type: string;
154
+ widget: string;
155
+ span: number;
156
+ properties: Record<string, import("@pdfme/common").PropPanelSchema>;
157
+ };
158
158
  };
159
159
  export declare const getColumnStylesPropPanelSchema: ({ head, i18n, }: {
160
160
  head: string[];
package/dist/tables.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { l as getTableBodyRange, o as createTableBodySplitRange, r as TABLE_BODY_SPLIT_UNIT } from "./splitRange-BHV0vb0Q.js";
2
- import { n as getDynamicLayoutForTable, t as getDynamicHeightsForTable } from "./dynamicTemplate-BgH01dcs.js";
2
+ import { n as getDynamicLayoutForTable, t as getDynamicHeightsForTable } from "./dynamicTemplate-CnK0nlnj.js";
3
3
  export { TABLE_BODY_SPLIT_UNIT, createTableBodySplitRange, getDynamicHeightsForTable, getDynamicLayoutForTable, getTableBodyRange };
@@ -10,7 +10,7 @@ export declare const getFontDescentInPt: (fontKitFont: FontKitFont, fontSize: nu
10
10
  export declare const heightOfFontAtSize: (fontKitFont: FontKitFont, fontSize: number) => number;
11
11
  export declare const widthOfTextAtSize: (text: string, fontKitFont: FontKitFont, fontSize: number, characterSpacing: number) => number;
12
12
  export declare const fetchRemoteFontData: (url: string) => Promise<ArrayBuffer>;
13
- export declare const getFontKitFont: (fontName: string | undefined, font: Font, _cache: Map<string | number, fontkit.Font>) => Promise<fontkit.Font>;
13
+ export declare const getFontKitFont: (fontName: string | undefined, font: Font, _cache: Map<string | number, fontkit.Font>) => Promise<FontKitFont>;
14
14
  /**
15
15
  * Recursively splits the line at getSplitPosition.
16
16
  * If there is some leftover, split the rest again in the same manner.
@@ -25,8 +25,8 @@ export declare const measureTextHeight: (args: MeasureTextHeightArgs) => Promise
25
25
  export declare const sumLineHeights: (lineHeights: number[]) => number;
26
26
  export declare const getTextLineHeightsWithBox: (lineHeights: number[], schema: TextSchema) => number[];
27
27
  export declare const getTextSplitBoxStyle: (schema: TextSchema, range: DynamicLayoutRange, totalLines: number) => {
28
- padding?: import("../box.js").BoxDimension | undefined;
29
28
  borderWidth?: import("../box.js").BoxDimension | undefined;
29
+ padding?: import("../box.js").BoxDimension | undefined;
30
30
  };
31
31
  export declare const getTextBoxVerticalInsetForRange: (schema: TextSchema, range: DynamicLayoutRange, totalLines: number) => number;
32
32
  export {};
@@ -1,7 +1,7 @@
1
1
  import { type BasePdf } from '@pdfme/common';
2
2
  import type { TextSchema } from './types.js';
3
3
  type TextOverflowSchema = Pick<TextSchema, 'overflow'> & Partial<Pick<TextSchema, 'type'>>;
4
- export declare const canUseTextOverflowExpand: (schema: Partial<Pick<TextSchema, "type">>, basePdf?: BasePdf) => boolean;
4
+ export declare const canUseTextOverflowExpand: (schema: Partial<Pick<TextSchema, 'type'>>, basePdf?: BasePdf) => boolean;
5
5
  export declare const isTextOverflowExpand: (schema: TextOverflowSchema, basePdf?: BasePdf) => boolean;
6
- export declare const shouldUseDynamicFontSize: (schema: Pick<TextSchema, "dynamicFontSize" | "overflow"> & Partial<Pick<TextSchema, "type">>, basePdf?: BasePdf) => boolean;
6
+ export declare const shouldUseDynamicFontSize: (schema: Pick<TextSchema, 'dynamicFontSize' | 'overflow'> & Partial<Pick<TextSchema, 'type'>>, basePdf?: BasePdf) => boolean;
7
7
  export {};
@@ -10,9 +10,9 @@ export declare const renderInlineMarkdownText: (arg: {
10
10
  font: Font;
11
11
  embedPdfFont: (fontName: string) => Promise<PDFFont>;
12
12
  fontKitFont: FontKitFont;
13
- pdfDoc: PDFRenderProps<TextSchema>["pdfDoc"];
14
- page: PDFRenderProps<TextSchema>["page"];
15
- pdfLib: PDFRenderProps<TextSchema>["pdfLib"];
13
+ pdfDoc: PDFRenderProps<TextSchema>['pdfDoc'];
14
+ page: PDFRenderProps<TextSchema>['page'];
15
+ pdfLib: PDFRenderProps<TextSchema>['pdfLib'];
16
16
  _cache: Map<string | number, unknown>;
17
17
  colorType: ColorType;
18
18
  fontSize: number;
package/dist/texts.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { X as TEXT_OVERFLOW_EXPAND, Z as TEXT_OVERFLOW_VISIBLE, i as TEXT_LINE_SPLIT_UNIT, s as createTextLineSplitRange, u as getTextLineRange } from "./splitRange-BHV0vb0Q.js";
2
2
  import { o as mergeTextLineRangeValue } from "./measure-BC7tjAtT.js";
3
- import { n as getDynamicLayoutForMultiVariableText, t as getDynamicLayoutForText } from "./dynamicTemplate-BcCrm2SZ.js";
3
+ import { n as getDynamicLayoutForMultiVariableText, t as getDynamicLayoutForText } from "./dynamicTemplate-DFk_de1Y.js";
4
4
  export { TEXT_LINE_SPLIT_UNIT, TEXT_OVERFLOW_EXPAND, TEXT_OVERFLOW_VISIBLE, createTextLineSplitRange, getDynamicLayoutForMultiVariableText, getDynamicLayoutForText, getTextLineRange, mergeTextLineRangeValue };
@@ -1,4 +1,4 @@
1
- import { t as getDynamicHeightsForTable$1 } from "./dynamicTemplate-BgH01dcs.js";
1
+ import { t as getDynamicHeightsForTable$1 } from "./dynamicTemplate-CnK0nlnj.js";
2
2
  import { isHexValid, mm2pt } from "@pdfme/common";
3
3
  import { cmyk, degrees, degreesToRadians, rgb } from "@pdfme/pdf-lib";
4
4
  //#region src/multiVariableText/variables.ts
@@ -250,4 +250,4 @@ var createSvgStr = (icon, attrs) => {
250
250
  //#endregion
251
251
  export { getDynamicHeightsForTable as a, isEditable as c, countUniqueVariableNames as d, getVariableNames as f, createSvgStr as i, readFile as l, convertForPdfLayoutProps as n, hex2PrintingColor as o, visitVariables as p, createErrorElm as r, hex2RgbColor as s, addAlphaToHex as t, rotatePoint as u };
252
252
 
253
- //# sourceMappingURL=utils-nI6J7wZM.js.map
253
+ //# sourceMappingURL=utils-D_sFXK0U.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-nI6J7wZM.js","names":[],"sources":["../src/multiVariableText/variables.ts","../src/utils.ts"],"sourcesContent":["export type VariableMatch = {\n name: string;\n startIndex: number;\n endIndex: number;\n};\n\nexport type VariableIndices = Map<number, string>;\n\nexport const visitVariables = (content: string, visitor: (match: VariableMatch) => void): void => {\n let startIndex = -1;\n\n for (let i = 0; i < content.length; i++) {\n const char = content[i];\n\n if (char === '{') {\n // Restart from the latest opener so malformed input behaves like /{([^{}]+)}/g\n // without requiring backtracking.\n startIndex = i;\n continue;\n }\n\n if (char === '}' && startIndex !== -1) {\n const name = content.slice(startIndex + 1, i);\n if (name.length > 0) {\n visitor({ name, startIndex, endIndex: i });\n }\n startIndex = -1;\n }\n }\n};\n\nexport const getVariableIndices = (content: string): VariableIndices => {\n const indices: VariableIndices = new Map();\n\n visitVariables(content, ({ name, startIndex }) => {\n indices.set(startIndex, name);\n });\n\n return indices;\n};\n\nexport const countUniqueVariableNames = (content: string): number => {\n const variableNames = new Set<string>();\n\n visitVariables(content, ({ name }) => {\n variableNames.add(name);\n });\n\n return variableNames.size;\n};\n\nexport const getVariableNames = (content: string): string[] => {\n const variableNames: string[] = [];\n\n visitVariables(content, ({ name }) => {\n variableNames.push(name);\n });\n\n return variableNames;\n};\n","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 { measureTextHeight } from './text/measure.js';\nexport { escapeInlineMarkdown } from './text/inlineMarkdown.js';\nexport { getVariableNames, visitVariables } from './multiVariableText/variables.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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"}
1
+ {"version":3,"file":"utils-D_sFXK0U.js","names":[],"sources":["../src/multiVariableText/variables.ts","../src/utils.ts"],"sourcesContent":["export type VariableMatch = {\n name: string;\n startIndex: number;\n endIndex: number;\n};\n\nexport type VariableIndices = Map<number, string>;\n\nexport const visitVariables = (content: string, visitor: (match: VariableMatch) => void): void => {\n let startIndex = -1;\n\n for (let i = 0; i < content.length; i++) {\n const char = content[i];\n\n if (char === '{') {\n // Restart from the latest opener so malformed input behaves like /{([^{}]+)}/g\n // without requiring backtracking.\n startIndex = i;\n continue;\n }\n\n if (char === '}' && startIndex !== -1) {\n const name = content.slice(startIndex + 1, i);\n if (name.length > 0) {\n visitor({ name, startIndex, endIndex: i });\n }\n startIndex = -1;\n }\n }\n};\n\nexport const getVariableIndices = (content: string): VariableIndices => {\n const indices: VariableIndices = new Map();\n\n visitVariables(content, ({ name, startIndex }) => {\n indices.set(startIndex, name);\n });\n\n return indices;\n};\n\nexport const countUniqueVariableNames = (content: string): number => {\n const variableNames = new Set<string>();\n\n visitVariables(content, ({ name }) => {\n variableNames.add(name);\n });\n\n return variableNames.size;\n};\n\nexport const getVariableNames = (content: string): string[] => {\n const variableNames: string[] = [];\n\n visitVariables(content, ({ name }) => {\n variableNames.push(name);\n });\n\n return variableNames;\n};\n","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 { measureTextHeight } from './text/measure.js';\nexport { escapeInlineMarkdown } from './text/inlineMarkdown.js';\nexport { getVariableNames, visitVariables } from './multiVariableText/variables.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/dist/utils.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Color } from '@pdfme/pdf-lib';
2
2
  import { Schema, Mode, ColorType } from '@pdfme/common';
3
3
  import { IconNode } from 'lucide';
4
+ import { getDynamicHeightsForTable as _getDynamicHeightsForTable } from './tables/dynamicTemplate.js';
4
5
  export { measureTextHeight } from './text/measure.js';
5
6
  export { escapeInlineMarkdown } from './text/inlineMarkdown.js';
6
7
  export { getVariableNames, visitVariables } from './multiVariableText/variables.js';
@@ -28,12 +29,7 @@ export declare const rotatePoint: (point: {
28
29
  x: number;
29
30
  y: number;
30
31
  };
31
- export declare const getDynamicHeightsForTable: (value: string, args: {
32
- schema: Schema;
33
- basePdf: import("@pdfme/common").BasePdf;
34
- options: import("@pdfme/common").CommonOptions;
35
- _cache: Map<string | number, unknown>;
36
- }) => Promise<number[]>;
32
+ export declare const getDynamicHeightsForTable: typeof _getDynamicHeightsForTable;
37
33
  export declare const addAlphaToHex: (hex: string, alphaPercentage: number) => string;
38
34
  export declare const isEditable: (mode: Mode, schema: Schema) => boolean;
39
35
  export declare const hex2RgbColor: (hexString: string | undefined) => import("@pdfme/pdf-lib").RGB | undefined;
package/dist/utils.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { h as escapeInlineMarkdown, i as measureTextHeight } from "./measure-BC7tjAtT.js";
2
- import { a as getDynamicHeightsForTable, c as isEditable, f as getVariableNames, i as createSvgStr, l as readFile, n as convertForPdfLayoutProps, o as hex2PrintingColor, p as visitVariables, r as createErrorElm, s as hex2RgbColor, t as addAlphaToHex, u as rotatePoint } from "./utils-nI6J7wZM.js";
2
+ import { a as getDynamicHeightsForTable, c as isEditable, f as getVariableNames, i as createSvgStr, l as readFile, n as convertForPdfLayoutProps, o as hex2PrintingColor, p as visitVariables, r as createErrorElm, s as hex2RgbColor, t as addAlphaToHex, u as rotatePoint } from "./utils-D_sFXK0U.js";
3
3
  export { addAlphaToHex, convertForPdfLayoutProps, createErrorElm, createSvgStr, escapeInlineMarkdown, getDynamicHeightsForTable, getVariableNames, hex2PrintingColor, hex2RgbColor, isEditable, measureTextHeight, readFile, rotatePoint, visitVariables };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/schemas",
3
- "version": "6.1.12-dev.7",
3
+ "version": "6.1.13",
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",
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamicTemplate-BcCrm2SZ.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 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 = value;\n if (!schema.readOnly) {\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":";;;;AAiBA,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,cAAc;CAClB,IAAI,CAAC,OAAO,UAAU;EACpB,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;;;ACvDA,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 +0,0 @@
1
- {"version":3,"file":"dynamicTemplate-BgH01dcs.js","names":[],"sources":["../src/tables/classes.ts","../src/tables/tableHelper.ts","../src/constants.ts","../src/tables/helper.ts","../src/tables/dynamicTemplate.ts"],"sourcesContent":["import { Font, mm2pt, pt2mm } from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport { splitTextToSize, getFontKitFont, widthOfTextAtSize } from '../text/helper.js';\nimport type { Styles, TableInput, Settings, Section, StylesProps } from './types.js';\n\ntype ContentSettings = { body: Row[]; head: Row[]; columns: Column[] };\n\nexport class Cell {\n raw: string;\n text: string[];\n styles: Styles;\n section: Section;\n contentHeight = 0;\n contentWidth = 0;\n wrappedWidth = 0;\n minReadableWidth = 0;\n minWidth = 0;\n\n width = 0;\n height = 0;\n x = 0;\n y = 0;\n\n constructor(raw: string, styles: Styles, section: Section) {\n this.styles = styles;\n this.section = section;\n this.raw = raw;\n const splitRegex = /\\r\\n|\\r|\\n/g;\n this.text = raw.split(splitRegex);\n }\n\n getContentHeight() {\n const lineCount = Array.isArray(this.text) ? this.text.length : 1;\n const lineHeight = pt2mm(this.styles.fontSize) * this.styles.lineHeight;\n const vPadding = this.padding('top') + this.padding('bottom');\n const height = lineCount * lineHeight + vPadding;\n return Math.max(height, this.styles.minCellHeight);\n }\n\n padding(name: 'top' | 'bottom' | 'left' | 'right') {\n return this.styles.cellPadding[name];\n }\n}\n\nexport class Column {\n index: number;\n wrappedWidth = 0;\n minReadableWidth = 0;\n minWidth = 0;\n width = 0;\n\n constructor(index: number) {\n this.index = index;\n }\n\n getMaxCustomCellWidth(table: Table) {\n let max = 0;\n for (const row of table.allRows()) {\n const cell: Cell = row.cells[this.index];\n max = Math.max(max, cell.styles.cellWidth);\n }\n return max;\n }\n}\n\nexport class Row {\n readonly raw: string[];\n readonly index: number;\n readonly section: Section;\n readonly cells: { [key: string]: Cell };\n\n height = 0;\n\n constructor(raw: string[], index: number, section: Section, cells: { [key: string]: Cell }) {\n this.raw = raw;\n this.index = index;\n this.section = section;\n this.cells = cells;\n }\n\n getMaxCellHeight(columns: Column[]) {\n return columns.reduce((acc, column) => Math.max(acc, this.cells[column.index]?.height || 0), 0);\n }\n\n getMinimumRowHeight(columns: Column[]) {\n return columns.reduce((acc: number, column: Column) => {\n const cell = this.cells[column.index];\n if (!cell) return 0;\n const vPadding = cell.padding('top') + cell.padding('bottom');\n const oneRowHeight = vPadding + cell.styles.lineHeight;\n return oneRowHeight > acc ? oneRowHeight : acc;\n }, 0);\n }\n}\n\nexport class Table {\n readonly settings: Settings;\n readonly styles: StylesProps;\n\n readonly columns: Column[];\n readonly head: Row[];\n readonly body: Row[];\n\n constructor(input: TableInput, content: ContentSettings) {\n this.settings = input.settings;\n this.styles = input.styles;\n\n this.columns = content.columns;\n this.head = content.head;\n this.body = content.body;\n }\n\n static async create(arg: {\n input: TableInput;\n content: ContentSettings;\n font: Font;\n _cache: Map<string | number, FontKitFont>;\n }) {\n const { input, content, font, _cache } = arg;\n const table = new Table(input, content);\n\n await calculateWidths({ table, font, _cache });\n\n return table;\n }\n\n getHeadHeight() {\n return this.head.reduce((acc, row) => acc + row.getMaxCellHeight(this.columns), 0);\n }\n\n getBodyHeight() {\n return this.body.reduce((acc, row) => acc + row.getMaxCellHeight(this.columns), 0);\n }\n\n allRows() {\n return this.head.concat(this.body);\n }\n\n getWidth() {\n return this.settings.tableWidth;\n }\n\n getHeight() {\n return (this.settings.showHead ? this.getHeadHeight() : 0) + this.getBodyHeight();\n }\n}\n\nasync function calculateWidths(arg: {\n table: Table;\n font: Font;\n _cache: Map<string | number, FontKitFont>;\n}) {\n const { table, font, _cache } = arg;\n\n const getFontKitFontByFontName = (fontName: string | undefined) =>\n getFontKitFont(fontName, font, _cache);\n\n await calculate(table, getFontKitFontByFontName);\n\n const resizableColumns: Column[] = [];\n let initialTableWidth = 0;\n\n table.columns.forEach((column) => {\n const customWidth = column.getMaxCustomCellWidth(table);\n if (customWidth) {\n // final column width\n column.width = customWidth;\n } else {\n // initial column width (will be resized)\n column.width = column.wrappedWidth;\n resizableColumns.push(column);\n }\n initialTableWidth += column.width;\n });\n\n // width difference that needs to be distributed\n let resizeWidth = table.getWidth() - initialTableWidth;\n\n // first resize attempt: with respect to minReadableWidth and minWidth\n if (resizeWidth) {\n resizeWidth = resizeColumns(resizableColumns, resizeWidth, (column) =>\n Math.max(column.minReadableWidth, column.minWidth),\n );\n }\n\n // second resize attempt: ignore minReadableWidth but respect minWidth\n if (resizeWidth) {\n resizeWidth = resizeColumns(resizableColumns, resizeWidth, (column) => column.minWidth);\n }\n\n resizeWidth = Math.abs(resizeWidth);\n\n applyColSpans(table);\n await fitContent(table, getFontKitFontByFontName);\n applyRowSpans(table);\n}\n\nfunction applyRowSpans(table: Table) {\n const rowSpanCells: {\n [key: string]: { cell: Cell; left: number; row: Row };\n } = {};\n let colRowSpansLeft = 1;\n const all = table.allRows();\n for (let rowIndex = 0; rowIndex < all.length; rowIndex++) {\n const row = all[rowIndex];\n for (const column of table.columns) {\n const data = rowSpanCells[column.index];\n if (colRowSpansLeft > 1) {\n colRowSpansLeft--;\n delete row.cells[column.index];\n } else if (data) {\n data.cell.height += row.height;\n colRowSpansLeft = 1;\n delete row.cells[column.index];\n data.left--;\n if (data.left <= 1) {\n delete rowSpanCells[column.index];\n }\n } else {\n const cell = row.cells[column.index];\n if (!cell) {\n continue;\n }\n cell.height = row.height;\n }\n }\n }\n}\n\nfunction applyColSpans(table: Table) {\n const all = table.allRows();\n for (let rowIndex = 0; rowIndex < all.length; rowIndex++) {\n const row = all[rowIndex];\n\n let colSpanCell = null;\n let combinedColSpanWidth = 0;\n let colSpansLeft = 0;\n for (let columnIndex = 0; columnIndex < table.columns.length; columnIndex++) {\n const column = table.columns[columnIndex];\n\n // Width and colspan\n colSpansLeft -= 1;\n if (colSpansLeft > 1 && table.columns[columnIndex + 1]) {\n combinedColSpanWidth += column.width;\n delete row.cells[column.index];\n } else if (colSpanCell) {\n const cell: Cell = colSpanCell;\n delete row.cells[column.index];\n colSpanCell = null;\n cell.width = column.width + combinedColSpanWidth;\n } else {\n const cell = row.cells[column.index];\n if (!cell) continue;\n colSpansLeft = 1;\n combinedColSpanWidth = 0;\n cell.width = column.width + combinedColSpanWidth;\n }\n }\n }\n}\n\nasync function fitContent(\n table: Table,\n getFontKitFontByFontName: (fontName: string | undefined) => Promise<FontKitFont>,\n) {\n const rowSpanHeight = { count: 0, height: 0 };\n for (const row of table.allRows()) {\n for (const column of table.columns) {\n const cell: Cell = row.cells[column.index];\n if (!cell) continue;\n\n const fontKitFont = await getFontKitFontByFontName(cell.styles.fontName);\n cell.text = splitTextToSize({\n value: cell.raw,\n characterSpacing: cell.styles.characterSpacing,\n boxWidthInPt: mm2pt(cell.width),\n fontSize: cell.styles.fontSize,\n fontKitFont,\n });\n\n cell.contentHeight = cell.getContentHeight();\n\n let realContentHeight = cell.contentHeight;\n if (rowSpanHeight && rowSpanHeight.count > 0) {\n if (rowSpanHeight.height > realContentHeight) {\n realContentHeight = rowSpanHeight.height;\n }\n }\n if (realContentHeight > row.height) {\n row.height = realContentHeight;\n }\n }\n rowSpanHeight.count--;\n }\n}\n\nfunction resizeColumns(\n columns: Column[],\n resizeWidth: number,\n getMinWidth: (column: Column) => number,\n) {\n const initialResizeWidth = resizeWidth;\n const sumWrappedWidth = columns.reduce((acc, column) => acc + column.wrappedWidth, 0);\n\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n\n const ratio = column.wrappedWidth / sumWrappedWidth;\n const suggestedChange = initialResizeWidth * ratio;\n const suggestedWidth = column.width + suggestedChange;\n\n const minWidth = getMinWidth(column);\n const newWidth = suggestedWidth < minWidth ? minWidth : suggestedWidth;\n\n resizeWidth -= newWidth - column.width;\n column.width = newWidth;\n }\n\n resizeWidth = Math.round(resizeWidth * 1e10) / 1e10;\n\n // Run the resizer again if there's remaining width needs\n // to be distributed and there're columns that can be resized\n if (resizeWidth) {\n const resizableColumns = columns.filter((column) => {\n return resizeWidth < 0\n ? column.width > getMinWidth(column) // check if column can shrink\n : true; // check if column can grow\n });\n\n if (resizableColumns.length) {\n resizeWidth = resizeColumns(resizableColumns, resizeWidth, getMinWidth);\n }\n }\n\n return resizeWidth;\n}\n\nasync function calculate(\n table: Table,\n getFontKitFontByFontName: (fontName: string | undefined) => Promise<FontKitFont>,\n) {\n for (const row of table.allRows()) {\n for (const column of table.columns) {\n const cell = row.cells[column.index];\n if (!cell) continue;\n\n const hPadding = cell.padding('right') + cell.padding('left');\n const fontKitFont = await getFontKitFontByFontName(cell.styles.fontName);\n\n cell.contentWidth = getStringWidth(cell, fontKitFont) + hPadding;\n\n const longestWordWidth = getStringWidth(\n Object.assign(cell, { text: cell.text.join(' ').split(/\\s+/) }),\n fontKitFont,\n );\n cell.minReadableWidth = longestWordWidth + hPadding;\n\n cell.minWidth = cell.styles.cellWidth;\n cell.wrappedWidth = cell.styles.cellWidth;\n }\n }\n\n for (const row of table.allRows()) {\n for (const column of table.columns) {\n const cell = row.cells[column.index];\n\n // For now we ignore the minWidth and wrappedWidth of colspan cells when calculating colspan widths.\n // Could probably be improved upon however.\n if (cell) {\n column.wrappedWidth = Math.max(column.wrappedWidth, cell.wrappedWidth);\n column.minWidth = Math.max(column.minWidth, cell.minWidth);\n column.minReadableWidth = Math.max(column.minReadableWidth, cell.minReadableWidth);\n } else {\n // Respect cellWidth set in columnStyles even if there is no cells for this column\n // or if the column only have colspan cells. Since the width of colspan cells\n // does not affect the width of columns, setting columnStyles cellWidth enables the\n // user to at least do it manually.\n\n // Note that this is not perfect for now since for example row and table styles are\n // not accounted for\n const columnStyles = table.styles.columnStyles[column.index] || {};\n const cellWidth = columnStyles.cellWidth || columnStyles.minCellWidth;\n if (cellWidth) {\n column.minWidth = cellWidth;\n column.wrappedWidth = cellWidth;\n }\n }\n }\n }\n}\n\nfunction getStringWidth(cell: Cell, fontKitFont: FontKitFont) {\n const text = cell.text;\n const textArr: string[] = Array.isArray(text) ? text : [text];\n const fontSize = cell.styles.fontSize;\n const characterSpacing = cell.styles.characterSpacing;\n const widestLineWidth = textArr\n .map((text) => widthOfTextAtSize(text, fontKitFont, fontSize, characterSpacing))\n .reduce((a, b) => Math.max(a, b), 0);\n\n return widestLineWidth;\n}\n","import {\n Schema,\n isBlankPdf,\n BasePdf,\n CommonOptions,\n getDefaultFont,\n getFallbackFontName,\n cloneDeep,\n} from '@pdfme/common';\nimport type { Font as FontKitFont } from 'fontkit';\nimport type {\n TableSchema,\n CellStyle,\n Styles,\n Spacing,\n TableInput,\n StylesProps,\n Section,\n} from './types.js';\nimport { Cell, Column, Row, Table } from './classes.js';\nimport { getTableBodyRange } from '../splitRange.js';\n\ntype StyleProp = 'styles' | 'headStyles' | 'bodyStyles' | 'alternateRowStyles' | 'columnStyles';\n\ninterface CreateTableArgs {\n schema: Schema;\n basePdf: BasePdf;\n options: CommonOptions;\n _cache: Map<string | number, unknown>;\n}\n\ninterface UserOptions {\n startY: number;\n tableWidth: number;\n margin: Spacing;\n showHead: boolean;\n tableLineWidth?: number;\n tableLineColor?: string;\n head?: string[][];\n body?: string[][];\n\n styles?: Partial<Styles>;\n bodyStyles?: Partial<Styles>;\n headStyles?: Partial<Styles>;\n alternateRowStyles?: Partial<Styles>;\n columnStyles?: {\n [key: string]: Partial<Styles>;\n };\n}\n\nfunction parseSection(\n sectionName: Section,\n sectionRows: string[][],\n columns: Column[],\n styleProps: StylesProps,\n fallbackFontName: string,\n): Row[] {\n const rowSpansLeftForColumn: { [key: string]: { left: number; times: number } } = {};\n const result = sectionRows.map((rawRow, rowIndex) => {\n let skippedRowForRowSpans = 0;\n const cells: { [key: string]: Cell } = {};\n\n let colSpansAdded = 0;\n let columnSpansLeft = 0;\n for (const column of columns) {\n if (\n rowSpansLeftForColumn[column.index] == null ||\n rowSpansLeftForColumn[column.index].left === 0\n ) {\n if (columnSpansLeft === 0) {\n let rawCell;\n if (Array.isArray(rawRow)) {\n rawCell = rawRow[column.index - colSpansAdded - skippedRowForRowSpans];\n } else {\n rawCell = rawRow[column.index];\n }\n const styles = cellStyles(sectionName, column, rowIndex, styleProps, fallbackFontName);\n const cell = new Cell(rawCell, styles, sectionName);\n cells[column.index] = cell;\n\n columnSpansLeft = 0;\n rowSpansLeftForColumn[column.index] = {\n left: 0,\n times: columnSpansLeft,\n };\n } else {\n columnSpansLeft--;\n colSpansAdded++;\n }\n } else {\n rowSpansLeftForColumn[column.index].left--;\n columnSpansLeft = rowSpansLeftForColumn[column.index].times;\n skippedRowForRowSpans++;\n }\n }\n return new Row(rawRow, rowIndex, sectionName, cells);\n });\n return result;\n}\n\nfunction parseContent4Table(input: TableInput, fallbackFontName: string) {\n const content = input.content;\n const columns = content.columns.map((index) => new Column(index));\n const styles = input.styles;\n return {\n columns,\n head: parseSection('head', content.head, columns, styles, fallbackFontName),\n body: parseSection('body', content.body, columns, styles, fallbackFontName),\n };\n}\n\nfunction cellStyles(\n sectionName: Section,\n column: Column,\n rowIndex: number,\n styles: StylesProps,\n fallbackFontName: string,\n) {\n let sectionStyles;\n if (sectionName === 'head') {\n sectionStyles = styles.headStyles;\n } else if (sectionName === 'body') {\n sectionStyles = styles.bodyStyles;\n }\n const otherStyles = Object.assign({}, styles.styles, sectionStyles);\n\n const colStyles = styles.columnStyles[column.index] || {};\n\n const rowStyles =\n sectionName === 'body' && rowIndex % 2 === 0\n ? Object.assign({}, styles.alternateRowStyles)\n : {};\n\n const defaultStyle = {\n fontName: fallbackFontName,\n backgroundColor: '',\n textColor: '#000000',\n lineHeight: 1,\n characterSpacing: 0,\n alignment: 'left',\n verticalAlignment: 'middle',\n fontSize: 10,\n cellPadding: 5,\n lineColor: '#000000',\n lineWidth: 0,\n minCellHeight: 0,\n minCellWidth: 0,\n };\n return Object.assign(defaultStyle, otherStyles, rowStyles, colStyles) as Styles;\n}\n\nfunction mapCellStyle(style: CellStyle): Partial<Styles> {\n return {\n fontName: style.fontName,\n alignment: style.alignment,\n verticalAlignment: style.verticalAlignment,\n fontSize: style.fontSize,\n lineHeight: style.lineHeight,\n characterSpacing: style.characterSpacing,\n backgroundColor: style.backgroundColor,\n // ---\n textColor: style.fontColor,\n lineColor: style.borderColor,\n lineWidth: style.borderWidth,\n cellPadding: style.padding,\n };\n}\n\nfunction getTableOptions(schema: TableSchema, body: string[][]): UserOptions {\n const columnStylesWidth = schema.headWidthPercentages.reduce(\n (acc, cur, i) => ({ ...acc, [i]: { cellWidth: schema.width * (cur / 100) } }),\n {} as Record<number, Partial<Styles>>,\n );\n\n const columnStylesAlignment = Object.entries(schema.columnStyles.alignment || {}).reduce(\n (acc, [key, value]) => ({ ...acc, [key]: { alignment: value } }),\n {} as Record<number, Partial<Styles>>,\n );\n\n const allKeys = new Set([\n ...Object.keys(columnStylesWidth).map(Number),\n ...Object.keys(columnStylesAlignment).map(Number),\n ]);\n const columnStyles = Array.from(allKeys).reduce(\n (acc, key) => {\n const widthStyle = columnStylesWidth[key] || {};\n const alignmentStyle = columnStylesAlignment[key] || {};\n return { ...acc, [key]: { ...widthStyle, ...alignmentStyle } };\n },\n {} as Record<number, Partial<Styles>>,\n );\n\n return {\n head: [schema.head],\n body,\n showHead: schema.showHead,\n startY: schema.position.y,\n tableWidth: schema.width,\n tableLineColor: schema.tableStyles.borderColor,\n tableLineWidth: schema.tableStyles.borderWidth,\n headStyles: mapCellStyle(schema.headStyles),\n bodyStyles: mapCellStyle(schema.bodyStyles),\n alternateRowStyles: { backgroundColor: schema.bodyStyles.alternateBackgroundColor },\n columnStyles,\n margin: { top: 0, right: 0, left: schema.position.x, bottom: 0 },\n };\n}\n\nfunction parseStyles(cInput: UserOptions) {\n const styleOptions: StylesProps = {\n styles: {},\n headStyles: {},\n bodyStyles: {},\n alternateRowStyles: {},\n columnStyles: {},\n };\n for (const prop of Object.keys(styleOptions) as StyleProp[]) {\n if (prop === 'columnStyles') {\n const current = cInput[prop];\n styleOptions.columnStyles = Object.assign({}, current);\n } else {\n const allOptions = [cInput];\n const styles = allOptions.map((opts) => opts[prop] || {});\n styleOptions[prop] = Object.assign({}, styles[0], styles[1], styles[2]);\n }\n }\n return styleOptions;\n}\n\nfunction parseContent4Input(options: UserOptions) {\n const head = options.head || [];\n const body = options.body || [];\n const columns = (head[0] || body[0] || []).map((_, index) => index);\n return { columns, head, body };\n}\n\nfunction parseInput(schema: TableSchema, body: string[][]): TableInput {\n const options = getTableOptions(schema, body);\n const styles = parseStyles(options);\n const settings = {\n startY: options.startY,\n margin: options.margin,\n tableWidth: options.tableWidth,\n showHead: options.showHead,\n tableLineWidth: options.tableLineWidth ?? 0,\n tableLineColor: options.tableLineColor ?? '',\n };\n\n const content = parseContent4Input(options);\n\n return { content, styles, settings };\n}\n\nexport function createSingleTable(body: string[][], args: CreateTableArgs) {\n const { options, _cache, basePdf } = args;\n if (!isBlankPdf(basePdf)) {\n console.warn(\n '[@pdfme/schema/table]' +\n 'When specifying a custom PDF for basePdf, ' +\n 'you cannot use features such as page breaks or re-layout of other elements.' +\n 'To utilize these features, please define basePdf as follows:\\n' +\n '{ width: number; height: number; padding: [number, number, number, number]; }',\n );\n }\n\n const schema = cloneDeep(args.schema) as TableSchema;\n const { start } = getTableBodyRange(schema) || { start: 0 };\n if (start % 2 === 1) {\n const alternateBackgroundColor = schema.bodyStyles.alternateBackgroundColor;\n schema.bodyStyles.alternateBackgroundColor = schema.bodyStyles.backgroundColor;\n schema.bodyStyles.backgroundColor = alternateBackgroundColor;\n }\n schema.showHead =\n schema.showHead === false ? false : !schema.__isSplit || schema.repeatHead === true;\n\n const input = parseInput(schema, body);\n\n const font = options.font || getDefaultFont();\n\n const fallbackFontName = getFallbackFontName(font);\n\n const content = parseContent4Table(input, fallbackFontName);\n\n return Table.create({\n input,\n content,\n font,\n _cache: _cache as unknown as Map<string | number, FontKitFont>,\n });\n}\n","export const DEFAULT_OPACITY = 1;\nexport const HEX_COLOR_PATTERN = '^#(?:[A-Fa-f0-9]{6})$';\n","import {\n DEFAULT_ALIGNMENT,\n DEFAULT_FONT_SIZE,\n DEFAULT_LINE_HEIGHT,\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_FONT_COLOR,\n ALIGN_RIGHT,\n ALIGN_CENTER,\n ALIGN_LEFT,\n VERTICAL_ALIGN_TOP,\n VERTICAL_ALIGN_MIDDLE,\n VERTICAL_ALIGN_BOTTOM,\n} from '../text/constants.js';\nimport { HEX_COLOR_PATTERN } from '../constants.js';\nimport type { TableSchema } from './types.js';\nimport { getTableBodyRange } from '../splitRange.js';\nimport type { DynamicLayoutRange } from '@pdfme/common';\nimport { createBoxDimension, getBoxDimensionPropPanelSchema } from '../box.js';\n\nexport const getDefaultCellStyles = () => ({\n fontName: undefined,\n alignment: DEFAULT_ALIGNMENT,\n verticalAlignment: VERTICAL_ALIGN_MIDDLE,\n fontSize: DEFAULT_FONT_SIZE,\n lineHeight: DEFAULT_LINE_HEIGHT,\n characterSpacing: DEFAULT_CHARACTER_SPACING,\n fontColor: DEFAULT_FONT_COLOR,\n backgroundColor: '',\n borderColor: '#888888',\n borderWidth: createBoxDimension(0.1),\n padding: createBoxDimension(5),\n});\n\nexport const getCellPropPanelSchema = (arg: {\n i18n: (key: string) => string;\n fallbackFontName: string;\n fontNames: string[];\n isBody?: boolean;\n}) => {\n const { i18n, fallbackFontName, fontNames, isBody } = arg;\n\n return {\n fontName: {\n title: i18n('schemas.text.fontName'),\n type: 'string',\n widget: 'select',\n default: fallbackFontName,\n placeholder: fallbackFontName,\n props: { options: fontNames.map((name) => ({ label: name, value: name })) },\n span: 12,\n },\n fontSize: {\n title: i18n('schemas.text.size'),\n type: 'number',\n widget: 'inputNumber',\n props: { min: 0 },\n span: 6,\n },\n characterSpacing: {\n title: i18n('schemas.text.spacing'),\n type: 'number',\n widget: 'inputNumber',\n props: { min: 0 },\n span: 6,\n },\n alignment: {\n title: i18n('schemas.text.textAlign'),\n type: 'string',\n widget: 'select',\n props: {\n options: [\n { label: i18n('schemas.left'), value: ALIGN_LEFT },\n { label: i18n('schemas.center'), value: ALIGN_CENTER },\n { label: i18n('schemas.right'), value: ALIGN_RIGHT },\n ],\n },\n span: 8,\n },\n verticalAlignment: {\n title: i18n('schemas.text.verticalAlign'),\n type: 'string',\n widget: 'select',\n props: {\n options: [\n { label: i18n('schemas.top'), value: VERTICAL_ALIGN_TOP },\n { label: i18n('schemas.middle'), value: VERTICAL_ALIGN_MIDDLE },\n { label: i18n('schemas.bottom'), value: VERTICAL_ALIGN_BOTTOM },\n ],\n },\n span: 8,\n },\n lineHeight: {\n title: i18n('schemas.text.lineHeight'),\n type: 'number',\n widget: 'inputNumber',\n props: { step: 0.1, min: 0 },\n span: 8,\n },\n fontColor: {\n title: i18n('schemas.textColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],\n },\n borderColor: {\n title: i18n('schemas.borderColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],\n },\n backgroundColor: {\n title: i18n('schemas.backgroundColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],\n },\n ...(isBody\n ? {\n alternateBackgroundColor: {\n title: i18n('schemas.table.alternateBackgroundColor'),\n type: 'string',\n widget: 'color',\n props: {\n disabledAlpha: true,\n },\n rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],\n },\n }\n : {}),\n '-': { type: 'void', widget: 'Divider' },\n borderWidth: {\n title: i18n('schemas.borderWidth'),\n type: 'object',\n widget: 'lineTitle',\n span: 24,\n properties: getBoxDimensionPropPanelSchema(0.1),\n },\n '--': { type: 'void', widget: 'Divider' },\n padding: {\n title: i18n('schemas.padding'),\n type: 'object',\n widget: 'lineTitle',\n span: 24,\n properties: getBoxDimensionPropPanelSchema(),\n },\n };\n};\n\nexport const getColumnStylesPropPanelSchema = ({\n head,\n i18n,\n}: {\n head: string[];\n i18n: (key: string) => string;\n}) => ({\n alignment: {\n type: 'object',\n widget: 'lineTitle',\n title: i18n('schemas.text.textAlign'),\n column: 3,\n properties: head.reduce(\n (acc, cur, i) =>\n Object.assign(acc, {\n [i]: {\n title: cur || 'Column ' + String(i + 1),\n type: 'string',\n widget: 'select',\n props: {\n options: [\n { label: i18n('schemas.left'), value: ALIGN_LEFT },\n { label: i18n('schemas.center'), value: ALIGN_CENTER },\n { label: i18n('schemas.right'), value: ALIGN_RIGHT },\n ],\n },\n },\n }),\n {},\n ),\n },\n});\n\nexport const getBody = (value: string | string[][]): string[][] => {\n if (typeof value === 'string') {\n return JSON.parse(value || '[]') as string[][];\n }\n return value || [];\n};\n\nexport const getBodyWithRange = (value: string | string[][], range?: DynamicLayoutRange) => {\n const body = getBody(value);\n if (!range) return body;\n return body.slice(range.start, range.end);\n};\n\nexport const getBodyWithSchemaRange = (\n value: string | string[][],\n schema: TableSchema,\n range = getTableBodyRange(schema),\n) => getBodyWithRange(value, range);\n","import {\n Schema,\n BasePdf,\n BlankPdf,\n CommonOptions,\n DynamicLayoutArgs,\n DynamicLayoutResult,\n isBlankPdf,\n} from '@pdfme/common';\nimport { createSingleTable } from './tableHelper.js';\nimport { getBodyWithRange, getBody } from './helper.js';\nimport { TableSchema } from './types.js';\nimport { createTableBodySplitRange, getTableBodyRange } from '../splitRange.js';\n\nexport const getDynamicHeightsForTable = async (\n value: string,\n args: {\n schema: Schema;\n basePdf: BasePdf;\n options: CommonOptions;\n _cache: Map<string | number, unknown>;\n },\n): Promise<number[]> => {\n if (args.schema.type !== 'table') return Promise.resolve([args.schema.height]);\n const schema = args.schema as TableSchema;\n const bodyRange = getTableBodyRange(schema);\n const body = bodyRange?.start === 0 ? getBody(value) : getBodyWithRange(value, bodyRange);\n const table = await createSingleTable(body, args);\n\n const baseHeights = schema.showHead\n ? table.allRows().map((row) => row.height)\n : [0].concat(table.body.map((row) => row.height));\n\n const headerHeight = schema.showHead ? table.getHeadHeight() : 0;\n const shouldRepeatHeader = schema.repeatHead && isBlankPdf(args.basePdf) && headerHeight > 0;\n\n if (!shouldRepeatHeader) {\n return baseHeights;\n }\n\n const basePdf = args.basePdf as BlankPdf;\n const [paddingTop, , paddingBottom] = basePdf.padding;\n const pageContentHeight = basePdf.height - paddingTop - paddingBottom;\n const getPageStartY = (pageIndex: number) => pageIndex * pageContentHeight + paddingTop;\n\n const initialPageIndex = Math.max(\n 0,\n Math.floor((schema.position.y - paddingTop) / pageContentHeight),\n );\n const headRowCount = schema.showHead ? table.head.length : 0;\n const SAFETY_MARGIN = 0.5;\n\n let currentPageIndex = initialPageIndex;\n let currentPageY = schema.position.y;\n let rowsOnCurrentPage = 0;\n\n const result: number[] = [];\n\n for (let i = 0; i < baseHeights.length; i++) {\n const isBodyRow = i >= headRowCount;\n const rowHeight = baseHeights[i];\n\n while (true) {\n const currentPageStartY = getPageStartY(currentPageIndex);\n const remainingHeight = currentPageStartY + pageContentHeight - currentPageY;\n const needsHeader =\n isBodyRow && rowsOnCurrentPage === 0 && currentPageIndex > initialPageIndex;\n const totalRowHeight = rowHeight + (needsHeader ? headerHeight : 0);\n\n if (totalRowHeight > remainingHeight - SAFETY_MARGIN) {\n if (rowsOnCurrentPage === 0 && Math.abs(currentPageY - currentPageStartY) < SAFETY_MARGIN) {\n result.push(totalRowHeight);\n currentPageY += totalRowHeight;\n rowsOnCurrentPage++;\n break;\n }\n currentPageIndex++;\n currentPageY = getPageStartY(currentPageIndex);\n rowsOnCurrentPage = 0;\n continue;\n }\n\n result.push(totalRowHeight);\n currentPageY += totalRowHeight;\n rowsOnCurrentPage++;\n\n if (currentPageY >= currentPageStartY + pageContentHeight - SAFETY_MARGIN) {\n currentPageIndex++;\n currentPageY = getPageStartY(currentPageIndex);\n rowsOnCurrentPage = 0;\n }\n break;\n }\n }\n\n return result;\n};\n\nexport const getDynamicLayoutForTable = async (\n value: string,\n args: DynamicLayoutArgs,\n): Promise<DynamicLayoutResult> => {\n const heights = await getDynamicHeightsForTable(value, args);\n\n return {\n heights,\n avoidFirstUnitOnly: true,\n patchSplitSchema: ({ start, end, isSplit }) => {\n const range = {\n start: start === 0 ? 0 : start - 1,\n end: end - 1,\n };\n return {\n __splitRange: createTableBodySplitRange(range.start, range.end),\n __isSplit: isSplit,\n };\n },\n };\n};\n"],"mappings":"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"}