@pdfme/schemas 5.3.11 → 5.3.12-dev.1
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/cjs/__tests__/barcode.test.js +37 -14
- package/dist/cjs/__tests__/barcode.test.js.map +1 -1
- package/dist/cjs/src/barcodes/constants.js +1 -0
- package/dist/cjs/src/barcodes/constants.js.map +1 -1
- package/dist/cjs/src/barcodes/helper.js +31 -16
- package/dist/cjs/src/barcodes/helper.js.map +1 -1
- package/dist/cjs/src/barcodes/pdfRender.js +5 -1
- package/dist/cjs/src/barcodes/pdfRender.js.map +1 -1
- package/dist/cjs/src/barcodes/propPanel.js +14 -1
- package/dist/cjs/src/barcodes/propPanel.js.map +1 -1
- package/dist/cjs/src/barcodes/uiRender.js +5 -3
- package/dist/cjs/src/barcodes/uiRender.js.map +1 -1
- package/dist/cjs/src/checkbox/index.js +2 -1
- package/dist/cjs/src/checkbox/index.js.map +1 -1
- package/dist/cjs/src/date/helper.js +1 -1
- package/dist/cjs/src/date/helper.js.map +1 -1
- package/dist/cjs/src/graphics/image.js +8 -3
- package/dist/cjs/src/graphics/image.js.map +1 -1
- package/dist/cjs/src/graphics/svg.js +3 -2
- package/dist/cjs/src/graphics/svg.js.map +1 -1
- package/dist/cjs/src/multiVariableText/helper.js +5 -3
- package/dist/cjs/src/multiVariableText/helper.js.map +1 -1
- package/dist/cjs/src/multiVariableText/propPanel.js +24 -12
- package/dist/cjs/src/multiVariableText/propPanel.js.map +1 -1
- package/dist/cjs/src/multiVariableText/uiRender.js +17 -12
- package/dist/cjs/src/multiVariableText/uiRender.js.map +1 -1
- package/dist/cjs/src/radioGroup/index.js.map +1 -1
- package/dist/cjs/src/select/index.js +9 -3
- package/dist/cjs/src/select/index.js.map +1 -1
- package/dist/cjs/src/shapes/rectAndEllipse.js.map +1 -1
- package/dist/cjs/src/tables/classes.js.map +1 -1
- package/dist/cjs/src/tables/pdfRender.js +16 -2
- package/dist/cjs/src/tables/pdfRender.js.map +1 -1
- package/dist/cjs/src/tables/propPanel.js +1 -1
- package/dist/cjs/src/tables/propPanel.js.map +1 -1
- package/dist/cjs/src/tables/tableHelper.js +6 -1
- package/dist/cjs/src/tables/tableHelper.js.map +1 -1
- package/dist/cjs/src/tables/uiRender.js +4 -2
- package/dist/cjs/src/tables/uiRender.js.map +1 -1
- package/dist/cjs/src/text/extraFormatter.js +1 -0
- package/dist/cjs/src/text/extraFormatter.js.map +1 -1
- package/dist/cjs/src/text/helper.js +19 -3
- package/dist/cjs/src/text/helper.js.map +1 -1
- package/dist/cjs/src/text/pdfRender.js +5 -1
- package/dist/cjs/src/text/pdfRender.js.map +1 -1
- package/dist/cjs/src/text/propPanel.js.map +1 -1
- package/dist/cjs/src/text/uiRender.js +9 -8
- package/dist/cjs/src/text/uiRender.js.map +1 -1
- package/dist/cjs/src/utils.js +3 -3
- package/dist/cjs/src/utils.js.map +1 -1
- package/dist/esm/__tests__/barcode.test.js +37 -14
- package/dist/esm/__tests__/barcode.test.js.map +1 -1
- package/dist/esm/src/barcodes/constants.js +1 -0
- package/dist/esm/src/barcodes/constants.js.map +1 -1
- package/dist/esm/src/barcodes/helper.js +31 -16
- package/dist/esm/src/barcodes/helper.js.map +1 -1
- package/dist/esm/src/barcodes/pdfRender.js +5 -1
- package/dist/esm/src/barcodes/pdfRender.js.map +1 -1
- package/dist/esm/src/barcodes/propPanel.js +14 -1
- package/dist/esm/src/barcodes/propPanel.js.map +1 -1
- package/dist/esm/src/barcodes/uiRender.js +5 -3
- package/dist/esm/src/barcodes/uiRender.js.map +1 -1
- package/dist/esm/src/checkbox/index.js +2 -1
- package/dist/esm/src/checkbox/index.js.map +1 -1
- package/dist/esm/src/date/helper.js +2 -2
- package/dist/esm/src/date/helper.js.map +1 -1
- package/dist/esm/src/graphics/image.js +8 -3
- package/dist/esm/src/graphics/image.js.map +1 -1
- package/dist/esm/src/graphics/svg.js +3 -2
- package/dist/esm/src/graphics/svg.js.map +1 -1
- package/dist/esm/src/multiVariableText/helper.js +5 -3
- package/dist/esm/src/multiVariableText/helper.js.map +1 -1
- package/dist/esm/src/multiVariableText/propPanel.js +24 -12
- package/dist/esm/src/multiVariableText/propPanel.js.map +1 -1
- package/dist/esm/src/multiVariableText/uiRender.js +17 -12
- package/dist/esm/src/multiVariableText/uiRender.js.map +1 -1
- package/dist/esm/src/radioGroup/index.js.map +1 -1
- package/dist/esm/src/select/index.js +9 -3
- package/dist/esm/src/select/index.js.map +1 -1
- package/dist/esm/src/shapes/rectAndEllipse.js.map +1 -1
- package/dist/esm/src/tables/classes.js.map +1 -1
- package/dist/esm/src/tables/pdfRender.js +16 -2
- package/dist/esm/src/tables/pdfRender.js.map +1 -1
- package/dist/esm/src/tables/propPanel.js +1 -1
- package/dist/esm/src/tables/propPanel.js.map +1 -1
- package/dist/esm/src/tables/tableHelper.js +6 -1
- package/dist/esm/src/tables/tableHelper.js.map +1 -1
- package/dist/esm/src/tables/uiRender.js +4 -2
- package/dist/esm/src/tables/uiRender.js.map +1 -1
- package/dist/esm/src/text/extraFormatter.js +1 -0
- package/dist/esm/src/text/extraFormatter.js.map +1 -1
- package/dist/esm/src/text/helper.js +19 -3
- package/dist/esm/src/text/helper.js.map +1 -1
- package/dist/esm/src/text/pdfRender.js +5 -1
- package/dist/esm/src/text/pdfRender.js.map +1 -1
- package/dist/esm/src/text/propPanel.js.map +1 -1
- package/dist/esm/src/text/uiRender.js +8 -6
- package/dist/esm/src/text/uiRender.js.map +1 -1
- package/dist/esm/src/utils.js +3 -3
- package/dist/esm/src/utils.js.map +1 -1
- package/dist/node/__tests__/barcode.test.js +37 -14
- package/dist/node/__tests__/barcode.test.js.map +1 -1
- package/dist/node/src/barcodes/constants.js +1 -0
- package/dist/node/src/barcodes/constants.js.map +1 -1
- package/dist/node/src/barcodes/helper.js +31 -16
- package/dist/node/src/barcodes/helper.js.map +1 -1
- package/dist/node/src/barcodes/pdfRender.js +5 -1
- package/dist/node/src/barcodes/pdfRender.js.map +1 -1
- package/dist/node/src/barcodes/propPanel.js +14 -1
- package/dist/node/src/barcodes/propPanel.js.map +1 -1
- package/dist/node/src/barcodes/uiRender.js +5 -3
- package/dist/node/src/barcodes/uiRender.js.map +1 -1
- package/dist/node/src/checkbox/index.js +2 -1
- package/dist/node/src/checkbox/index.js.map +1 -1
- package/dist/node/src/date/helper.js +1 -1
- package/dist/node/src/date/helper.js.map +1 -1
- package/dist/node/src/graphics/image.js +8 -3
- package/dist/node/src/graphics/image.js.map +1 -1
- package/dist/node/src/graphics/svg.js +3 -2
- package/dist/node/src/graphics/svg.js.map +1 -1
- package/dist/node/src/multiVariableText/helper.js +5 -3
- package/dist/node/src/multiVariableText/helper.js.map +1 -1
- package/dist/node/src/multiVariableText/propPanel.js +24 -12
- package/dist/node/src/multiVariableText/propPanel.js.map +1 -1
- package/dist/node/src/multiVariableText/uiRender.js +17 -12
- package/dist/node/src/multiVariableText/uiRender.js.map +1 -1
- package/dist/node/src/radioGroup/index.js.map +1 -1
- package/dist/node/src/select/index.js +9 -3
- package/dist/node/src/select/index.js.map +1 -1
- package/dist/node/src/shapes/rectAndEllipse.js.map +1 -1
- package/dist/node/src/tables/classes.js.map +1 -1
- package/dist/node/src/tables/pdfRender.js +16 -2
- package/dist/node/src/tables/pdfRender.js.map +1 -1
- package/dist/node/src/tables/propPanel.js +1 -1
- package/dist/node/src/tables/propPanel.js.map +1 -1
- package/dist/node/src/tables/tableHelper.js +6 -1
- package/dist/node/src/tables/tableHelper.js.map +1 -1
- package/dist/node/src/tables/uiRender.js +4 -2
- package/dist/node/src/tables/uiRender.js.map +1 -1
- package/dist/node/src/text/extraFormatter.js +1 -0
- package/dist/node/src/text/extraFormatter.js.map +1 -1
- package/dist/node/src/text/helper.js +19 -3
- package/dist/node/src/text/helper.js.map +1 -1
- package/dist/node/src/text/pdfRender.js +5 -1
- package/dist/node/src/text/pdfRender.js.map +1 -1
- package/dist/node/src/text/propPanel.js.map +1 -1
- package/dist/node/src/text/uiRender.js +9 -8
- package/dist/node/src/text/uiRender.js.map +1 -1
- package/dist/node/src/utils.js +3 -3
- package/dist/node/src/utils.js.map +1 -1
- package/dist/types/src/barcodes/constants.d.ts +1 -1
- package/dist/types/src/barcodes/helper.d.ts +1 -1
- package/dist/types/src/barcodes/index.d.ts +1 -1
- package/dist/types/src/checkbox/index.d.ts +1 -2
- package/dist/types/src/graphics/image.d.ts +1 -2
- package/dist/types/src/graphics/svg.d.ts +1 -2
- package/dist/types/src/radioGroup/index.d.ts +1 -2
- package/dist/types/src/shapes/rectAndEllipse.d.ts +91 -7
- package/dist/types/src/tables/classes.d.ts +2 -1
- package/dist/types/src/tables/dynamicTemplate.d.ts +1 -1
- package/dist/types/src/tables/tableHelper.d.ts +1 -1
- package/dist/types/src/text/extraFormatter.d.ts +2 -3
- package/dist/types/src/text/helper.d.ts +1 -1
- package/dist/types/src/text/uiRender.d.ts +0 -3
- package/dist/types/src/utils.d.ts +1 -1
- package/package.json +2 -2
- package/src/barcodes/constants.ts +1 -0
- package/src/barcodes/helper.ts +35 -26
- package/src/barcodes/pdfRender.ts +7 -4
- package/src/barcodes/propPanel.ts +14 -1
- package/src/barcodes/uiRender.ts +3 -3
- package/src/checkbox/index.ts +4 -5
- package/src/date/helper.ts +15 -8
- package/src/graphics/image.ts +6 -4
- package/src/graphics/svg.ts +6 -6
- package/src/multiVariableText/helper.ts +6 -4
- package/src/multiVariableText/propPanel.ts +29 -14
- package/src/multiVariableText/uiRender.ts +22 -15
- package/src/radioGroup/index.ts +3 -4
- package/src/select/index.ts +12 -6
- package/src/shapes/rectAndEllipse.ts +4 -4
- package/src/tables/classes.ts +6 -2
- package/src/tables/dynamicTemplate.ts +1 -1
- package/src/tables/pdfRender.ts +28 -3
- package/src/tables/propPanel.ts +1 -1
- package/src/tables/tableHelper.ts +8 -2
- package/src/tables/uiRender.ts +2 -2
- package/src/text/extraFormatter.ts +3 -3
- package/src/text/helper.ts +19 -6
- package/src/text/pdfRender.ts +7 -3
- package/src/text/propPanel.ts +6 -4
- package/src/text/uiRender.ts +11 -7
- package/src/utils.ts +9 -5
- package/dist/cjs/src/graphics/cacheKey.js +0 -6
- package/dist/cjs/src/graphics/cacheKey.js.map +0 -1
- package/dist/esm/src/graphics/cacheKey.js +0 -2
- package/dist/esm/src/graphics/cacheKey.js.map +0 -1
- package/dist/node/src/graphics/cacheKey.js +0 -6
- package/dist/node/src/graphics/cacheKey.js.map +0 -1
- package/dist/types/src/graphics/cacheKey.d.ts +0 -2
- package/src/graphics/cacheKey.ts +0 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Schema } from '@pdfme/common';
|
1
|
+
import { Schema, UIRenderProps, PDFRenderProps } from '@pdfme/common';
|
2
2
|
interface ShapeSchema extends Schema {
|
3
3
|
type: 'ellipse' | 'rectangle';
|
4
4
|
borderWidth: number;
|
@@ -38,13 +38,55 @@ export declare const rectangle: {
|
|
38
38
|
schemas: import("@pdfme/common").SchemaForUI[];
|
39
39
|
options: import("@pdfme/common").UIOptions;
|
40
40
|
theme: import("antd").GlobalToken;
|
41
|
-
i18n: (key:
|
41
|
+
i18n: (key: string) => string;
|
42
42
|
}, "rootElement">) => Record<string, import("@pdfme/common").PropPanelSchema>) | Record<string, import("@pdfme/common").PropPanelSchema>;
|
43
43
|
widgets?: Record<string, (props: import("@pdfme/common").PropPanelWidgetProps) => void>;
|
44
44
|
};
|
45
45
|
icon: string;
|
46
|
-
pdf: (arg:
|
47
|
-
|
46
|
+
pdf: (arg: PDFRenderProps<ShapeSchema & {
|
47
|
+
name: string;
|
48
|
+
type: string;
|
49
|
+
position: {
|
50
|
+
x: number;
|
51
|
+
y: number;
|
52
|
+
};
|
53
|
+
width: number;
|
54
|
+
height: number;
|
55
|
+
content?: string | undefined;
|
56
|
+
rotate?: number | undefined;
|
57
|
+
opacity?: number | undefined;
|
58
|
+
readOnly?: boolean | undefined;
|
59
|
+
required?: boolean | undefined;
|
60
|
+
__bodyRange?: {
|
61
|
+
start: number;
|
62
|
+
end?: number | undefined;
|
63
|
+
} | undefined;
|
64
|
+
__isSplit?: boolean | undefined;
|
65
|
+
} & {
|
66
|
+
[k: string]: unknown;
|
67
|
+
}>) => Promise<void> | void;
|
68
|
+
ui: (arg: UIRenderProps<ShapeSchema & {
|
69
|
+
name: string;
|
70
|
+
type: string;
|
71
|
+
position: {
|
72
|
+
x: number;
|
73
|
+
y: number;
|
74
|
+
};
|
75
|
+
width: number;
|
76
|
+
height: number;
|
77
|
+
content?: string | undefined;
|
78
|
+
rotate?: number | undefined;
|
79
|
+
opacity?: number | undefined;
|
80
|
+
readOnly?: boolean | undefined;
|
81
|
+
required?: boolean | undefined;
|
82
|
+
__bodyRange?: {
|
83
|
+
start: number;
|
84
|
+
end?: number | undefined;
|
85
|
+
} | undefined;
|
86
|
+
__isSplit?: boolean | undefined;
|
87
|
+
} & {
|
88
|
+
[k: string]: unknown;
|
89
|
+
}>) => Promise<void> | void;
|
48
90
|
uninterruptedEditMode?: boolean;
|
49
91
|
};
|
50
92
|
export declare const ellipse: {
|
@@ -80,13 +122,55 @@ export declare const ellipse: {
|
|
80
122
|
schemas: import("@pdfme/common").SchemaForUI[];
|
81
123
|
options: import("@pdfme/common").UIOptions;
|
82
124
|
theme: import("antd").GlobalToken;
|
83
|
-
i18n: (key:
|
125
|
+
i18n: (key: string) => string;
|
84
126
|
}, "rootElement">) => Record<string, import("@pdfme/common").PropPanelSchema>) | Record<string, import("@pdfme/common").PropPanelSchema>;
|
85
127
|
widgets?: Record<string, (props: import("@pdfme/common").PropPanelWidgetProps) => void>;
|
86
128
|
};
|
87
129
|
icon: string;
|
88
|
-
pdf: (arg:
|
89
|
-
|
130
|
+
pdf: (arg: PDFRenderProps<ShapeSchema & {
|
131
|
+
name: string;
|
132
|
+
type: string;
|
133
|
+
position: {
|
134
|
+
x: number;
|
135
|
+
y: number;
|
136
|
+
};
|
137
|
+
width: number;
|
138
|
+
height: number;
|
139
|
+
content?: string | undefined;
|
140
|
+
rotate?: number | undefined;
|
141
|
+
opacity?: number | undefined;
|
142
|
+
readOnly?: boolean | undefined;
|
143
|
+
required?: boolean | undefined;
|
144
|
+
__bodyRange?: {
|
145
|
+
start: number;
|
146
|
+
end?: number | undefined;
|
147
|
+
} | undefined;
|
148
|
+
__isSplit?: boolean | undefined;
|
149
|
+
} & {
|
150
|
+
[k: string]: unknown;
|
151
|
+
}>) => Promise<void> | void;
|
152
|
+
ui: (arg: UIRenderProps<ShapeSchema & {
|
153
|
+
name: string;
|
154
|
+
type: string;
|
155
|
+
position: {
|
156
|
+
x: number;
|
157
|
+
y: number;
|
158
|
+
};
|
159
|
+
width: number;
|
160
|
+
height: number;
|
161
|
+
content?: string | undefined;
|
162
|
+
rotate?: number | undefined;
|
163
|
+
opacity?: number | undefined;
|
164
|
+
readOnly?: boolean | undefined;
|
165
|
+
required?: boolean | undefined;
|
166
|
+
__bodyRange?: {
|
167
|
+
start: number;
|
168
|
+
end?: number | undefined;
|
169
|
+
} | undefined;
|
170
|
+
__isSplit?: boolean | undefined;
|
171
|
+
} & {
|
172
|
+
[k: string]: unknown;
|
173
|
+
}>) => Promise<void> | void;
|
90
174
|
uninterruptedEditMode?: boolean;
|
91
175
|
};
|
92
176
|
export {};
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { Font } from '@pdfme/common';
|
2
|
+
import type { Font as FontKitFont } from 'fontkit';
|
2
3
|
import type { Styles, TableInput, Settings, Section, StylesProps } from './types.js';
|
3
4
|
type ContentSettings = {
|
4
5
|
body: Row[];
|
@@ -57,7 +58,7 @@ export declare class Table {
|
|
57
58
|
input: TableInput;
|
58
59
|
content: ContentSettings;
|
59
60
|
font: Font;
|
60
|
-
_cache: Map<
|
61
|
+
_cache: Map<string | number, FontKitFont>;
|
61
62
|
}): Promise<Table>;
|
62
63
|
getHeadHeight(): number;
|
63
64
|
getBodyHeight(): number;
|
@@ -4,7 +4,7 @@ interface CreateTableArgs {
|
|
4
4
|
schema: Schema;
|
5
5
|
basePdf: BasePdf;
|
6
6
|
options: CommonOptions;
|
7
|
-
_cache: Map<
|
7
|
+
_cache: Map<string | number, unknown>;
|
8
8
|
}
|
9
9
|
export declare function createSingleTable(body: string[][], args: CreateTableArgs): Promise<Table>;
|
10
10
|
export {};
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { Dict } from '@pdfme/common';
|
2
1
|
export declare enum Formatter {
|
3
2
|
STRIKETHROUGH = "strikethrough",
|
4
3
|
UNDERLINE = "underline",
|
@@ -16,8 +15,8 @@ interface GroupButtonString {
|
|
16
15
|
type: 'select';
|
17
16
|
value: string;
|
18
17
|
}
|
19
|
-
|
20
|
-
export declare function getExtraFormatterSchema(i18n: (key:
|
18
|
+
type GroupButton = GroupButtonBoolean | GroupButtonString;
|
19
|
+
export declare function getExtraFormatterSchema(i18n: (key: string) => string): {
|
21
20
|
title: string;
|
22
21
|
widget: string;
|
23
22
|
buttons: GroupButton[];
|
@@ -9,7 +9,7 @@ export declare const getBrowserVerticalFontAdjustments: (fontKitFont: FontKitFon
|
|
9
9
|
export declare const getFontDescentInPt: (fontKitFont: FontKitFont, fontSize: number) => number;
|
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
|
-
export declare const getFontKitFont: (fontName: string | undefined, font: Font, _cache: Map<
|
12
|
+
export declare const getFontKitFont: (fontName: string | undefined, font: Font, _cache: Map<string | number, fontkit.Font>) => Promise<fontkit.Font>;
|
13
13
|
/**
|
14
14
|
* Recursively splits the line at getSplitPosition.
|
15
15
|
* If there is some leftover, split the rest again in the same manner.
|
@@ -9,6 +9,3 @@ export declare const buildStyledTextContainer: (arg: UIRenderProps<TextSchema>,
|
|
9
9
|
*/
|
10
10
|
export declare const makeElementPlainTextContentEditable: (element: HTMLElement) => void;
|
11
11
|
export declare const mapVerticalAlignToFlex: (verticalAlignmentValue: string | undefined) => "center" | "flex-end" | "flex-start";
|
12
|
-
export declare const getBackgroundColor: (value: string, schema: {
|
13
|
-
backgroundColor?: string;
|
14
|
-
}) => string;
|
@@ -29,7 +29,7 @@ export declare const getDynamicHeightsForTable: (value: string, args: {
|
|
29
29
|
schema: Schema;
|
30
30
|
basePdf: import("@pdfme/common").BasePdf;
|
31
31
|
options: import("@pdfme/common").CommonOptions;
|
32
|
-
_cache: Map<
|
32
|
+
_cache: Map<string | number, unknown>;
|
33
33
|
}) => Promise<number[]>;
|
34
34
|
export declare const addAlphaToHex: (hex: string, alphaPercentage: number) => string;
|
35
35
|
export declare const isEditable: (mode: Mode, schema: Schema) => boolean;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@pdfme/schemas",
|
3
|
-
"version": "5.3.
|
3
|
+
"version": "5.3.12-dev.1",
|
4
4
|
"sideEffects": false,
|
5
5
|
"author": "hand-dot",
|
6
6
|
"license": "MIT",
|
@@ -49,7 +49,7 @@
|
|
49
49
|
"build:esm": "tsc -p tsconfig.esm.json",
|
50
50
|
"build:node": "tsc -p tsconfig.node.json",
|
51
51
|
"clean": "rimraf dist",
|
52
|
-
"lint": "eslint --ext .ts src --config eslint.config.mjs
|
52
|
+
"lint": "eslint --ext .ts src --config eslint.config.mjs",
|
53
53
|
"test": "jest",
|
54
54
|
"prune": "ts-prune src",
|
55
55
|
"prettier": "prettier --write 'src/**/*.ts'"
|
package/src/barcodes/helper.ts
CHANGED
@@ -25,76 +25,74 @@ const validateCheckDigit = (input: string, checkDigitPos: number) => {
|
|
25
25
|
|
26
26
|
return passCheckDigit;
|
27
27
|
};
|
28
|
-
|
29
28
|
export const validateBarcodeInput = (type: BarcodeTypes, input: string) => {
|
30
29
|
if (!input) return false;
|
31
30
|
|
32
31
|
if (!BARCODE_TYPES.includes(type)) return false;
|
33
32
|
|
34
33
|
if (type === 'qrcode') {
|
35
|
-
// 500
|
34
|
+
// Up to 500 characters
|
36
35
|
return input.length < 500;
|
37
36
|
}
|
38
37
|
if (type === 'japanpost') {
|
39
|
-
//
|
38
|
+
// For Japan Post: Postal codes must be digits (0-9) only.
|
39
|
+
// Address display numbers can use alphanumeric characters (0-9, A-Z) and hyphen (-).
|
40
40
|
const regexp = /^(\d{7})(\d|[A-Z]|-)+$/;
|
41
|
-
|
42
41
|
return regexp.test(input);
|
43
42
|
}
|
44
43
|
if (type === 'ean13') {
|
45
|
-
//
|
44
|
+
// For EAN-13: Valid characters are digits (0-9) only.
|
45
|
+
// Either 12 digits (without check digit) or 13 digits (with check digit).
|
46
46
|
const regexp = /^\d{12}$|^\d{13}$/;
|
47
|
-
|
48
47
|
return regexp.test(input) && validateCheckDigit(input, 13);
|
49
48
|
}
|
50
49
|
if (type === 'ean8') {
|
51
|
-
//
|
50
|
+
// For EAN-8: Valid characters are digits (0-9) only.
|
51
|
+
// Either 7 digits (without check digit) or 8 digits (with check digit).
|
52
52
|
const regexp = /^\d{7}$|^\d{8}$/;
|
53
|
-
|
54
53
|
return regexp.test(input) && validateCheckDigit(input, 8);
|
55
54
|
}
|
56
55
|
if (type === 'code39') {
|
57
|
-
//
|
56
|
+
// For Code39: Valid characters are digits (0-9), uppercase alphabets (A-Z),
|
57
|
+
// symbols (-, ., $, /, +, %), and space.
|
58
58
|
const regexp = /^(\d|[A-Z]|\-|\.|\$|\/|\+|\%|\s)+$/;
|
59
|
-
|
60
59
|
return regexp.test(input);
|
61
60
|
}
|
62
61
|
if (type === 'code128') {
|
63
|
-
//
|
62
|
+
// For Code128: Valid characters are all except Kanji, Hiragana, and Katakana.
|
64
63
|
// https://qiita.com/graminume/items/2ac8dd9c32277fa9da64
|
65
64
|
return !input.match(
|
66
65
|
/([\u30a0-\u30ff\u3040-\u309f\u3005-\u3006\u30e0-\u9fcf]|[A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}〜 ])+/,
|
67
66
|
);
|
68
67
|
}
|
69
68
|
if (type === 'nw7') {
|
70
|
-
//
|
71
|
-
//
|
69
|
+
// For NW-7: Valid characters are digits (0-9) and symbols (-, ., $, :, /, +).
|
70
|
+
// The first and last characters must be one of the alphabets A-D (start/stop codes).
|
72
71
|
const regexp = /^[A-Da-d]([0-9\-\.\$\:\/\+])+[A-Da-d]$/;
|
73
|
-
|
74
72
|
return regexp.test(input);
|
75
73
|
}
|
76
74
|
if (type === 'itf14') {
|
77
|
-
//
|
75
|
+
// For ITF-14: Valid characters are digits (0-9) only.
|
76
|
+
// Either 13 digits (without check digit) or 14 digits (with check digit).
|
78
77
|
const regexp = /^\d{13}$|^\d{14}$/;
|
79
|
-
|
80
78
|
return regexp.test(input) && validateCheckDigit(input, 14);
|
81
79
|
}
|
82
80
|
if (type === 'upca') {
|
83
|
-
//
|
81
|
+
// For UPCA: Valid characters are digits (0-9) only.
|
82
|
+
// Either 11 digits (without check digit) or 12 digits (with check digit).
|
84
83
|
const regexp = /^\d{11}$|^\d{12}$/;
|
85
|
-
|
86
84
|
return regexp.test(input) && validateCheckDigit(input, 12);
|
87
85
|
}
|
88
86
|
if (type === 'upce') {
|
89
|
-
//
|
90
|
-
//
|
87
|
+
// For UPCE: Valid characters are digits (0-9) only.
|
88
|
+
// The first digit (number system character) must be 0.
|
89
|
+
// Either 7 digits (without check digit) or 8 digits (with check digit).
|
91
90
|
const regexp = /^0(\d{6}$|\d{7}$)/;
|
92
|
-
|
93
91
|
return regexp.test(input) && validateCheckDigit(input, 8);
|
94
92
|
}
|
95
93
|
if (type === 'gs1datamatrix') {
|
96
94
|
let ret = false;
|
97
|
-
//
|
95
|
+
// Find the GTIN application identifier: regex for "(01)" and the digits following it until another "(".
|
98
96
|
const regexp = /\((01)\)(\d*)(\(|$)/;
|
99
97
|
let res = input.match(regexp);
|
100
98
|
if (
|
@@ -106,9 +104,13 @@ export const validateBarcodeInput = (type: BarcodeTypes, input: string) => {
|
|
106
104
|
let gtin = res[2];
|
107
105
|
ret = validateCheckDigit(gtin, gtin.length);
|
108
106
|
}
|
109
|
-
|
110
107
|
return ret;
|
111
108
|
}
|
109
|
+
if (type === 'pdf417') {
|
110
|
+
// PDF417 can encode a wide range of characters,
|
111
|
+
// but considering performance and library limitations, the maximum number of characters is limited (up to 1000 characters here).
|
112
|
+
return input.length > 0 && input.length <= 1000;
|
113
|
+
}
|
112
114
|
|
113
115
|
return false;
|
114
116
|
};
|
@@ -166,12 +168,19 @@ export const createBarCode = async (arg: {
|
|
166
168
|
|
167
169
|
if (typeof window !== 'undefined') {
|
168
170
|
const canvas = document.createElement('canvas');
|
169
|
-
//
|
170
|
-
bwipjs
|
171
|
+
// Use a type assertion to safely call toCanvas
|
172
|
+
const bwipjsModule = bwipjs as unknown as {
|
173
|
+
toCanvas(canvas: HTMLCanvasElement, options: RenderOptions): void;
|
174
|
+
};
|
175
|
+
bwipjsModule.toCanvas(canvas, bwipjsArg);
|
171
176
|
const dataUrl = canvas.toDataURL('image/png');
|
172
177
|
res = Buffer.from(b64toUint8Array(dataUrl).buffer);
|
173
178
|
} else {
|
174
|
-
|
179
|
+
// Use a type assertion to safely call toBuffer
|
180
|
+
const bwipjsModule = bwipjs as unknown as {
|
181
|
+
toBuffer(options: RenderOptions): Promise<Buffer>;
|
182
|
+
};
|
183
|
+
res = await bwipjsModule.toBuffer(bwipjsArg);
|
175
184
|
}
|
176
185
|
|
177
186
|
return res;
|
@@ -2,6 +2,7 @@ import { PDFRenderProps } from '@pdfme/common';
|
|
2
2
|
import { convertForPdfLayoutProps } from '../utils.js';
|
3
3
|
import type { BarcodeSchema } from './types.js';
|
4
4
|
import { createBarCode, validateBarcodeInput } from './helper.js';
|
5
|
+
import { PDFImage } from '@pdfme/pdf-lib';
|
5
6
|
|
6
7
|
const getBarcodeCacheKey = (schema: BarcodeSchema, value: string) => {
|
7
8
|
return `${schema.type}${schema.backgroundColor}${schema.barColor}${schema.textColor}${value}${schema.includetext}`;
|
@@ -12,11 +13,13 @@ export const pdfRender = async (arg: PDFRenderProps<BarcodeSchema>) => {
|
|
12
13
|
if (!validateBarcodeInput(schema.type, value)) return;
|
13
14
|
|
14
15
|
const inputBarcodeCacheKey = getBarcodeCacheKey(schema, value);
|
15
|
-
let image = _cache.get(inputBarcodeCacheKey);
|
16
|
+
let image = _cache.get(inputBarcodeCacheKey) as PDFImage | undefined;
|
16
17
|
if (!image) {
|
17
|
-
const imageBuf = await createBarCode(
|
18
|
-
|
19
|
-
|
18
|
+
const imageBuf = await createBarCode({
|
19
|
+
...schema,
|
20
|
+
type: schema.type,
|
21
|
+
input: value,
|
22
|
+
});
|
20
23
|
image = await pdfDoc.embedPng(imageBuf);
|
21
24
|
_cache.set(inputBarcodeCacheKey, image);
|
22
25
|
}
|
@@ -172,10 +172,23 @@ const barcodeDefaults: { defaultSchema: BarcodeSchema }[] = [
|
|
172
172
|
opacity: DEFAULT_OPACITY,
|
173
173
|
},
|
174
174
|
},
|
175
|
+
{
|
176
|
+
defaultSchema: {
|
177
|
+
name: '',
|
178
|
+
type: 'pdf417',
|
179
|
+
content: 'This is PDF417!',
|
180
|
+
position,
|
181
|
+
...defaultColors,
|
182
|
+
width: 40,
|
183
|
+
height: 16,
|
184
|
+
rotate: 0,
|
185
|
+
opacity: DEFAULT_OPACITY,
|
186
|
+
},
|
187
|
+
},
|
175
188
|
];
|
176
189
|
|
177
190
|
export const getPropPanelByBarcodeType = (barcodeType: string): PropPanel<BarcodeSchema> => {
|
178
|
-
const barcodeHasText = barcodeType !== 'qrcode' && barcodeType !== 'gs1datamatrix';
|
191
|
+
const barcodeHasText = barcodeType !== 'qrcode' && barcodeType !== 'gs1datamatrix' && barcodeType !== 'pdf417';
|
179
192
|
|
180
193
|
const defaults = barcodeDefaults.find(({ defaultSchema }) => defaultSchema.type === barcodeType);
|
181
194
|
|
package/src/barcodes/uiRender.ts
CHANGED
@@ -69,10 +69,10 @@ export const uiRender = async (arg: UIRenderProps<BarcodeSchema>) => {
|
|
69
69
|
input.placeholder = placeholder || '';
|
70
70
|
input.tabIndex = tabIndex || 0;
|
71
71
|
input.addEventListener('change', (e: Event) => {
|
72
|
-
onChange
|
72
|
+
if (onChange) onChange({ key: 'content', value: (e.target as HTMLInputElement).value });
|
73
73
|
});
|
74
74
|
input.addEventListener('blur', () => {
|
75
|
-
stopEditing
|
75
|
+
if (stopEditing) stopEditing();
|
76
76
|
});
|
77
77
|
container.appendChild(input);
|
78
78
|
input.setSelectionRange(value.length, value.length);
|
@@ -88,7 +88,7 @@ export const uiRender = async (arg: UIRenderProps<BarcodeSchema>) => {
|
|
88
88
|
const imgElm = await createBarcodeImageElm(schema, value);
|
89
89
|
container.appendChild(imgElm);
|
90
90
|
} catch (err) {
|
91
|
-
console.error(`[@pdfme/ui] ${err}`);
|
91
|
+
console.error(`[@pdfme/ui] ${String(err)}`);
|
92
92
|
container.appendChild(createErrorElm());
|
93
93
|
}
|
94
94
|
};
|
package/src/checkbox/index.ts
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
import { Plugin } from '@pdfme/common';
|
2
|
-
import { Schema } from '@pdfme/common';
|
1
|
+
import { Plugin, Schema, UIRenderProps, PDFRenderProps } from '@pdfme/common';
|
3
2
|
import svg from '../graphics/svg.js';
|
4
3
|
import { isEditable } from '../utils.js';
|
5
4
|
import { HEX_COLOR_PATTERN } from '../constants.js';
|
@@ -19,7 +18,7 @@ const getIcon = ({ value, color }: { value: string; color: string }) =>
|
|
19
18
|
value === 'true' ? getCheckedIcon(color) : getUncheckedIcon(color);
|
20
19
|
|
21
20
|
const schema: Plugin<Checkbox> = {
|
22
|
-
ui: (arg) => {
|
21
|
+
ui: (arg: UIRenderProps<Checkbox>) => {
|
23
22
|
const { schema, value, onChange, rootElement, mode } = arg;
|
24
23
|
const container = document.createElement('div');
|
25
24
|
container.style.width = '100%';
|
@@ -27,7 +26,7 @@ const schema: Plugin<Checkbox> = {
|
|
27
26
|
|
28
27
|
if (isEditable(mode, schema)) {
|
29
28
|
container.addEventListener('click', () => {
|
30
|
-
onChange
|
29
|
+
if (onChange) onChange({ key: 'content', value: value === 'true' ? 'false' : 'true' });
|
31
30
|
});
|
32
31
|
}
|
33
32
|
|
@@ -40,7 +39,7 @@ const schema: Plugin<Checkbox> = {
|
|
40
39
|
|
41
40
|
rootElement.appendChild(container);
|
42
41
|
},
|
43
|
-
pdf: (arg) =>
|
42
|
+
pdf: (arg: PDFRenderProps<Checkbox>) =>
|
44
43
|
svg.pdf(Object.assign(arg, { value: getIcon({ value: arg.value, color: arg.schema.color }) })),
|
45
44
|
propPanel: {
|
46
45
|
schema: ({ i18n }) => ({
|
package/src/date/helper.ts
CHANGED
@@ -39,7 +39,14 @@ import localeZh from 'air-datepicker/locale/zh';
|
|
39
39
|
import * as dateFns from 'date-fns/locale';
|
40
40
|
import { format } from 'date-fns';
|
41
41
|
|
42
|
-
import {
|
42
|
+
import {
|
43
|
+
Plugin,
|
44
|
+
getFallbackFontName,
|
45
|
+
DEFAULT_FONT_NAME,
|
46
|
+
PropPanelSchema,
|
47
|
+
UIRenderProps,
|
48
|
+
PDFRenderProps,
|
49
|
+
} from '@pdfme/common';
|
43
50
|
import text from '../text/index.js';
|
44
51
|
import { DEFAULT_OPACITY, HEX_COLOR_PATTERN } from '../constants.js';
|
45
52
|
import { mapVerticalAlignToFlex } from '../text/uiRender.js';
|
@@ -200,7 +207,7 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
|
|
200
207
|
const defaultFormat = getFormat(type, getAirDatepickerLocale(defaultLocale));
|
201
208
|
|
202
209
|
const plugin: Plugin<DateSchema> = {
|
203
|
-
ui: async (arg) => {
|
210
|
+
ui: async (arg: UIRenderProps<DateSchema>) => {
|
204
211
|
const { schema, value, onChange, rootElement, mode, options, i18n } = arg;
|
205
212
|
|
206
213
|
const locale = getAirDatepickerLocale(schema.locale || options.lang || defaultLocale);
|
@@ -297,7 +304,7 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
|
|
297
304
|
rootElement.appendChild(input);
|
298
305
|
rootElement.appendChild(textElement);
|
299
306
|
},
|
300
|
-
pdf: (arg) => {
|
307
|
+
pdf: (arg: PDFRenderProps<DateSchema>) => {
|
301
308
|
const { schema, value, options } = arg;
|
302
309
|
if (!value) return void 0;
|
303
310
|
const locale = getAirDatepickerLocale(schema.locale || options.lang || defaultLocale);
|
@@ -318,12 +325,12 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
|
|
318
325
|
const fallbackFontName = getFallbackFontName(font);
|
319
326
|
|
320
327
|
const locale = getAirDatepickerLocale(
|
321
|
-
(activeSchema as
|
328
|
+
(activeSchema as { locale?: string }).locale || options.lang || defaultLocale,
|
322
329
|
);
|
323
330
|
|
324
331
|
if (
|
325
|
-
(activeSchema as
|
326
|
-
(activeSchema as
|
332
|
+
(activeSchema as { locale?: string }).locale === undefined &&
|
333
|
+
(activeSchema as { locale?: string }).locale !== options.lang
|
327
334
|
) {
|
328
335
|
changeSchemas([
|
329
336
|
{ schemaId: activeSchema.id, key: 'locale', value: options.lang },
|
@@ -336,13 +343,13 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
|
|
336
343
|
(button) => button.key === Formatter.ALIGNMENT,
|
337
344
|
);
|
338
345
|
|
339
|
-
const validateDateTimeFormat = (_rule:
|
346
|
+
const validateDateTimeFormat = (_rule: unknown, formatString: string): boolean => {
|
340
347
|
try {
|
341
348
|
format('Thu Jan 01 1970 00:00:00 GMT+0000', formatString, {
|
342
349
|
locale: locale.formatLocale,
|
343
350
|
});
|
344
351
|
return true;
|
345
|
-
} catch
|
352
|
+
} catch {
|
346
353
|
return false;
|
347
354
|
}
|
348
355
|
};
|
package/src/graphics/image.ts
CHANGED
@@ -20,7 +20,7 @@ const fullSize = { width: '100%', height: '100%' };
|
|
20
20
|
const defaultValue =
|
21
21
|
'data:image/png;base64,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';
|
22
22
|
|
23
|
-
|
23
|
+
type ImageSchema = Schema;
|
24
24
|
|
25
25
|
const imageSchema: Plugin<ImageSchema> = {
|
26
26
|
pdf: async (arg: PDFRenderProps<ImageSchema>) => {
|
@@ -131,7 +131,7 @@ const imageSchema: Plugin<ImageSchema> = {
|
|
131
131
|
};
|
132
132
|
Object.assign(button.style, buttonStyle);
|
133
133
|
button.addEventListener('click', () => {
|
134
|
-
onChange
|
134
|
+
if (onChange) onChange({ key: 'content', value: '' });
|
135
135
|
});
|
136
136
|
container.appendChild(button);
|
137
137
|
}
|
@@ -168,13 +168,15 @@ const imageSchema: Plugin<ImageSchema> = {
|
|
168
168
|
const changeEvent = event as unknown as ChangeEvent<HTMLInputElement>;
|
169
169
|
readFile(changeEvent.target.files)
|
170
170
|
.then((result) => {
|
171
|
-
onChange
|
171
|
+
if (onChange) onChange({ key: 'content', value: result as string });
|
172
172
|
})
|
173
173
|
.catch((error) => {
|
174
174
|
console.error('Error reading file:', error);
|
175
175
|
});
|
176
176
|
});
|
177
|
-
input.addEventListener('blur', () =>
|
177
|
+
input.addEventListener('blur', () => {
|
178
|
+
if (stopEditing) stopEditing();
|
179
|
+
});
|
178
180
|
label.appendChild(input);
|
179
181
|
}
|
180
182
|
},
|
package/src/graphics/svg.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Plugin, Schema } from '@pdfme/common';
|
1
|
+
import { Plugin, Schema, UIRenderProps, PDFRenderProps } from '@pdfme/common';
|
2
2
|
import {
|
3
3
|
convertForPdfLayoutProps,
|
4
4
|
isEditable,
|
@@ -31,7 +31,7 @@ const isValidSVG = (svgString: string): boolean => {
|
|
31
31
|
}
|
32
32
|
|
33
33
|
return true;
|
34
|
-
} catch
|
34
|
+
} catch {
|
35
35
|
return false;
|
36
36
|
}
|
37
37
|
};
|
@@ -42,10 +42,10 @@ const defaultValue = `<svg viewBox="0 0 488 600" version="1.1" xmlns="http://www
|
|
42
42
|
</g>
|
43
43
|
</svg>`;
|
44
44
|
|
45
|
-
|
45
|
+
export type SVGSchema = Schema;
|
46
46
|
|
47
47
|
const svgSchema: Plugin<SVGSchema> = {
|
48
|
-
ui: (arg) => {
|
48
|
+
ui: (arg: UIRenderProps<SVGSchema>) => {
|
49
49
|
const { rootElement, value, mode, onChange, theme, schema } = arg;
|
50
50
|
const container = document.createElement(isEditable(mode, schema) ? 'textarea' : 'div');
|
51
51
|
container.style.width = '100%';
|
@@ -73,7 +73,7 @@ const svgSchema: Plugin<SVGSchema> = {
|
|
73
73
|
|
74
74
|
textarea.addEventListener('change', (e: Event) => {
|
75
75
|
const newValue = (e.target as HTMLTextAreaElement).value;
|
76
|
-
onChange
|
76
|
+
if (onChange) onChange({ key: 'content', value: newValue });
|
77
77
|
});
|
78
78
|
rootElement.appendChild(container);
|
79
79
|
textarea.setSelectionRange(value.length, value.length);
|
@@ -93,7 +93,7 @@ const svgSchema: Plugin<SVGSchema> = {
|
|
93
93
|
}
|
94
94
|
}
|
95
95
|
},
|
96
|
-
pdf: async (arg) => {
|
96
|
+
pdf: async (arg: PDFRenderProps<SVGSchema>) => {
|
97
97
|
const { page, schema, value } = arg;
|
98
98
|
if (!value || !isValidSVG(value)) return;
|
99
99
|
const pageHeight = page.getHeight();
|
@@ -12,7 +12,9 @@ export const substituteVariables = (
|
|
12
12
|
|
13
13
|
if (variablesIn) {
|
14
14
|
const variables: Record<string, string> =
|
15
|
-
typeof variablesIn === 'string'
|
15
|
+
typeof variablesIn === 'string'
|
16
|
+
? (JSON.parse(variablesIn || '{}') as Record<string, string>)
|
17
|
+
: variablesIn;
|
16
18
|
|
17
19
|
Object.keys(variables).forEach((variableName) => {
|
18
20
|
// handle special characters in variable name
|
@@ -29,14 +31,14 @@ export const substituteVariables = (
|
|
29
31
|
};
|
30
32
|
|
31
33
|
export const validateVariables = (value: string, schema: MultiVariableTextSchema): boolean => {
|
32
|
-
if (schema.variables.length
|
34
|
+
if (schema.variables.length === 0) {
|
33
35
|
return true;
|
34
36
|
}
|
35
37
|
|
36
38
|
let values;
|
37
39
|
try {
|
38
|
-
values = value ? JSON.parse(value) : {};
|
39
|
-
} catch
|
40
|
+
values = value ? (JSON.parse(value) as Record<string, string>) : {};
|
41
|
+
} catch {
|
40
42
|
throw new SyntaxError(
|
41
43
|
`[@pdfme/generator] invalid JSON string '${value}' for variables in field ${schema.name}`,
|
42
44
|
);
|