@formepdf/react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.d.ts +200 -0
- package/dist/components.js +221 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +8 -0
- package/dist/render.d.ts +12 -0
- package/dist/render.js +15 -0
- package/dist/serialize.d.ts +12 -0
- package/dist/serialize.js +715 -0
- package/dist/stylesheet.d.ts +4 -0
- package/dist/stylesheet.js +5 -0
- package/dist/types.d.ts +324 -0
- package/dist/types.js +1 -0
- package/package.json +37 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/** Edge values for padding, margin, borderWidth */
|
|
3
|
+
export interface Edges {
|
|
4
|
+
top: number;
|
|
5
|
+
right: number;
|
|
6
|
+
bottom: number;
|
|
7
|
+
left: number;
|
|
8
|
+
}
|
|
9
|
+
/** Corner values for borderRadius */
|
|
10
|
+
export interface Corners {
|
|
11
|
+
topLeft: number;
|
|
12
|
+
topRight: number;
|
|
13
|
+
bottomRight: number;
|
|
14
|
+
bottomLeft: number;
|
|
15
|
+
}
|
|
16
|
+
/** Per-edge colors for borderColor */
|
|
17
|
+
export interface EdgeColors {
|
|
18
|
+
top: string;
|
|
19
|
+
right: string;
|
|
20
|
+
bottom: string;
|
|
21
|
+
left: string;
|
|
22
|
+
}
|
|
23
|
+
/** CSS-like style properties for Forme components */
|
|
24
|
+
export interface Style {
|
|
25
|
+
width?: number | string;
|
|
26
|
+
height?: number | string;
|
|
27
|
+
minWidth?: number | string;
|
|
28
|
+
minHeight?: number | string;
|
|
29
|
+
maxWidth?: number | string;
|
|
30
|
+
maxHeight?: number | string;
|
|
31
|
+
flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
|
|
32
|
+
flexGrow?: number;
|
|
33
|
+
flexShrink?: number;
|
|
34
|
+
flexBasis?: number | string;
|
|
35
|
+
flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
|
|
36
|
+
justifyContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';
|
|
37
|
+
alignItems?: 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
|
38
|
+
alignSelf?: 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
|
39
|
+
alignContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch';
|
|
40
|
+
gap?: number;
|
|
41
|
+
rowGap?: number;
|
|
42
|
+
columnGap?: number;
|
|
43
|
+
padding?: number | Edges;
|
|
44
|
+
paddingTop?: number;
|
|
45
|
+
paddingRight?: number;
|
|
46
|
+
paddingBottom?: number;
|
|
47
|
+
paddingLeft?: number;
|
|
48
|
+
paddingHorizontal?: number;
|
|
49
|
+
paddingVertical?: number;
|
|
50
|
+
margin?: number | Edges;
|
|
51
|
+
marginTop?: number;
|
|
52
|
+
marginRight?: number;
|
|
53
|
+
marginBottom?: number;
|
|
54
|
+
marginLeft?: number;
|
|
55
|
+
marginHorizontal?: number;
|
|
56
|
+
marginVertical?: number;
|
|
57
|
+
fontSize?: number;
|
|
58
|
+
fontFamily?: string;
|
|
59
|
+
fontWeight?: number | 'normal' | 'bold';
|
|
60
|
+
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
61
|
+
lineHeight?: number;
|
|
62
|
+
textAlign?: 'left' | 'center' | 'right' | 'justify';
|
|
63
|
+
letterSpacing?: number;
|
|
64
|
+
textDecoration?: 'none' | 'underline' | 'line-through';
|
|
65
|
+
textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';
|
|
66
|
+
color?: string;
|
|
67
|
+
backgroundColor?: string;
|
|
68
|
+
opacity?: number;
|
|
69
|
+
borderWidth?: number | Edges;
|
|
70
|
+
borderTopWidth?: number;
|
|
71
|
+
borderRightWidth?: number;
|
|
72
|
+
borderBottomWidth?: number;
|
|
73
|
+
borderLeftWidth?: number;
|
|
74
|
+
borderColor?: string | EdgeColors;
|
|
75
|
+
borderTopColor?: string;
|
|
76
|
+
borderRightColor?: string;
|
|
77
|
+
borderBottomColor?: string;
|
|
78
|
+
borderLeftColor?: string;
|
|
79
|
+
borderRadius?: number | Corners;
|
|
80
|
+
borderTopLeftRadius?: number;
|
|
81
|
+
borderTopRightRadius?: number;
|
|
82
|
+
borderBottomRightRadius?: number;
|
|
83
|
+
borderBottomLeftRadius?: number;
|
|
84
|
+
position?: 'relative' | 'absolute';
|
|
85
|
+
top?: number;
|
|
86
|
+
right?: number;
|
|
87
|
+
bottom?: number;
|
|
88
|
+
left?: number;
|
|
89
|
+
wrap?: boolean;
|
|
90
|
+
breakBefore?: boolean;
|
|
91
|
+
minWidowLines?: number;
|
|
92
|
+
minOrphanLines?: number;
|
|
93
|
+
}
|
|
94
|
+
export interface DocumentProps {
|
|
95
|
+
title?: string;
|
|
96
|
+
author?: string;
|
|
97
|
+
subject?: string;
|
|
98
|
+
creator?: string;
|
|
99
|
+
children?: ReactNode;
|
|
100
|
+
}
|
|
101
|
+
export interface PageProps {
|
|
102
|
+
size?: 'A4' | 'A3' | 'A5' | 'Letter' | 'Legal' | 'Tabloid' | {
|
|
103
|
+
width: number;
|
|
104
|
+
height: number;
|
|
105
|
+
};
|
|
106
|
+
margin?: number | Edges;
|
|
107
|
+
children?: ReactNode;
|
|
108
|
+
}
|
|
109
|
+
export interface ViewProps {
|
|
110
|
+
style?: Style;
|
|
111
|
+
wrap?: boolean;
|
|
112
|
+
bookmark?: string;
|
|
113
|
+
href?: string;
|
|
114
|
+
children?: ReactNode;
|
|
115
|
+
}
|
|
116
|
+
export interface TextProps {
|
|
117
|
+
style?: Style;
|
|
118
|
+
href?: string;
|
|
119
|
+
bookmark?: string;
|
|
120
|
+
children?: ReactNode;
|
|
121
|
+
}
|
|
122
|
+
export interface ImageProps {
|
|
123
|
+
src: string;
|
|
124
|
+
width?: number;
|
|
125
|
+
height?: number;
|
|
126
|
+
style?: Style;
|
|
127
|
+
}
|
|
128
|
+
export interface ColumnDef {
|
|
129
|
+
width: {
|
|
130
|
+
fraction: number;
|
|
131
|
+
} | {
|
|
132
|
+
fixed: number;
|
|
133
|
+
} | 'auto';
|
|
134
|
+
}
|
|
135
|
+
export interface TableProps {
|
|
136
|
+
columns?: ColumnDef[];
|
|
137
|
+
style?: Style;
|
|
138
|
+
children?: ReactNode;
|
|
139
|
+
}
|
|
140
|
+
export interface RowProps {
|
|
141
|
+
header?: boolean;
|
|
142
|
+
style?: Style;
|
|
143
|
+
children?: ReactNode;
|
|
144
|
+
}
|
|
145
|
+
export interface CellProps {
|
|
146
|
+
colSpan?: number;
|
|
147
|
+
rowSpan?: number;
|
|
148
|
+
style?: Style;
|
|
149
|
+
children?: ReactNode;
|
|
150
|
+
}
|
|
151
|
+
export interface FixedProps {
|
|
152
|
+
position: 'header' | 'footer';
|
|
153
|
+
style?: Style;
|
|
154
|
+
bookmark?: string;
|
|
155
|
+
children?: ReactNode;
|
|
156
|
+
}
|
|
157
|
+
export interface SvgProps {
|
|
158
|
+
width: number;
|
|
159
|
+
height: number;
|
|
160
|
+
viewBox?: string;
|
|
161
|
+
content: string;
|
|
162
|
+
style?: Style;
|
|
163
|
+
}
|
|
164
|
+
/** A styled text segment within a <Text> element */
|
|
165
|
+
export interface TextRun {
|
|
166
|
+
content: string;
|
|
167
|
+
style?: FormeStyle;
|
|
168
|
+
href?: string;
|
|
169
|
+
}
|
|
170
|
+
export interface FormeDocument {
|
|
171
|
+
children: FormeNode[];
|
|
172
|
+
metadata: FormeMetadata;
|
|
173
|
+
defaultPage: FormePageConfig;
|
|
174
|
+
}
|
|
175
|
+
export interface FormeMetadata {
|
|
176
|
+
title?: string;
|
|
177
|
+
author?: string;
|
|
178
|
+
subject?: string;
|
|
179
|
+
creator?: string;
|
|
180
|
+
}
|
|
181
|
+
export interface FormePageConfig {
|
|
182
|
+
size: FormePageSize;
|
|
183
|
+
margin: FormeEdges;
|
|
184
|
+
wrap: boolean;
|
|
185
|
+
}
|
|
186
|
+
export type FormePageSize = 'A4' | 'A3' | 'A5' | 'Letter' | 'Legal' | 'Tabloid' | {
|
|
187
|
+
Custom: {
|
|
188
|
+
width: number;
|
|
189
|
+
height: number;
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
export interface FormeEdges {
|
|
193
|
+
top: number;
|
|
194
|
+
right: number;
|
|
195
|
+
bottom: number;
|
|
196
|
+
left: number;
|
|
197
|
+
}
|
|
198
|
+
export interface FormeNode {
|
|
199
|
+
kind: FormeNodeKind;
|
|
200
|
+
style: FormeStyle;
|
|
201
|
+
children: FormeNode[];
|
|
202
|
+
bookmark?: string;
|
|
203
|
+
href?: string;
|
|
204
|
+
sourceLocation?: {
|
|
205
|
+
file: string;
|
|
206
|
+
line: number;
|
|
207
|
+
column: number;
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
export type FormeNodeKind = {
|
|
211
|
+
type: 'Page';
|
|
212
|
+
config: FormePageConfig;
|
|
213
|
+
} | {
|
|
214
|
+
type: 'View';
|
|
215
|
+
} | {
|
|
216
|
+
type: 'Text';
|
|
217
|
+
content: string;
|
|
218
|
+
href?: string;
|
|
219
|
+
runs?: TextRun[];
|
|
220
|
+
} | {
|
|
221
|
+
type: 'Image';
|
|
222
|
+
src: string;
|
|
223
|
+
width?: number;
|
|
224
|
+
height?: number;
|
|
225
|
+
} | {
|
|
226
|
+
type: 'Table';
|
|
227
|
+
columns: FormeColumnDef[];
|
|
228
|
+
} | {
|
|
229
|
+
type: 'TableRow';
|
|
230
|
+
is_header: boolean;
|
|
231
|
+
} | {
|
|
232
|
+
type: 'TableCell';
|
|
233
|
+
col_span: number;
|
|
234
|
+
row_span: number;
|
|
235
|
+
} | {
|
|
236
|
+
type: 'Fixed';
|
|
237
|
+
position: 'Header' | 'Footer';
|
|
238
|
+
} | {
|
|
239
|
+
type: 'Svg';
|
|
240
|
+
width: number;
|
|
241
|
+
height: number;
|
|
242
|
+
view_box?: string;
|
|
243
|
+
content: string;
|
|
244
|
+
} | {
|
|
245
|
+
type: 'PageBreak';
|
|
246
|
+
};
|
|
247
|
+
export interface FormeColumnDef {
|
|
248
|
+
width: FormeColumnWidth;
|
|
249
|
+
}
|
|
250
|
+
export type FormeColumnWidth = {
|
|
251
|
+
Fraction: number;
|
|
252
|
+
} | {
|
|
253
|
+
Fixed: number;
|
|
254
|
+
} | 'Auto';
|
|
255
|
+
export type FormeDimension = {
|
|
256
|
+
Pt: number;
|
|
257
|
+
} | {
|
|
258
|
+
Percent: number;
|
|
259
|
+
} | 'Auto';
|
|
260
|
+
export interface FormeColor {
|
|
261
|
+
r: number;
|
|
262
|
+
g: number;
|
|
263
|
+
b: number;
|
|
264
|
+
a: number;
|
|
265
|
+
}
|
|
266
|
+
export interface FormeEdgeValues<T> {
|
|
267
|
+
top: T;
|
|
268
|
+
right: T;
|
|
269
|
+
bottom: T;
|
|
270
|
+
left: T;
|
|
271
|
+
}
|
|
272
|
+
export interface FormeCornerValues {
|
|
273
|
+
top_left: number;
|
|
274
|
+
top_right: number;
|
|
275
|
+
bottom_right: number;
|
|
276
|
+
bottom_left: number;
|
|
277
|
+
}
|
|
278
|
+
/** Style in the Forme JSON format (camelCase field names, PascalCase enum values) */
|
|
279
|
+
export interface FormeStyle {
|
|
280
|
+
width?: FormeDimension;
|
|
281
|
+
height?: FormeDimension;
|
|
282
|
+
minWidth?: FormeDimension;
|
|
283
|
+
minHeight?: FormeDimension;
|
|
284
|
+
maxWidth?: FormeDimension;
|
|
285
|
+
maxHeight?: FormeDimension;
|
|
286
|
+
padding?: FormeEdges;
|
|
287
|
+
margin?: FormeEdges;
|
|
288
|
+
flexDirection?: string;
|
|
289
|
+
justifyContent?: string;
|
|
290
|
+
alignItems?: string;
|
|
291
|
+
alignSelf?: string;
|
|
292
|
+
alignContent?: string;
|
|
293
|
+
flexWrap?: string;
|
|
294
|
+
flexGrow?: number;
|
|
295
|
+
flexShrink?: number;
|
|
296
|
+
flexBasis?: FormeDimension;
|
|
297
|
+
gap?: number;
|
|
298
|
+
rowGap?: number;
|
|
299
|
+
columnGap?: number;
|
|
300
|
+
fontFamily?: string;
|
|
301
|
+
fontSize?: number;
|
|
302
|
+
fontWeight?: number;
|
|
303
|
+
fontStyle?: string;
|
|
304
|
+
lineHeight?: number;
|
|
305
|
+
textAlign?: string;
|
|
306
|
+
letterSpacing?: number;
|
|
307
|
+
textDecoration?: string;
|
|
308
|
+
textTransform?: string;
|
|
309
|
+
color?: FormeColor;
|
|
310
|
+
backgroundColor?: FormeColor;
|
|
311
|
+
opacity?: number;
|
|
312
|
+
borderWidth?: FormeEdgeValues<number>;
|
|
313
|
+
borderColor?: FormeEdgeValues<FormeColor>;
|
|
314
|
+
borderRadius?: FormeCornerValues;
|
|
315
|
+
position?: string;
|
|
316
|
+
top?: number;
|
|
317
|
+
right?: number;
|
|
318
|
+
bottom?: number;
|
|
319
|
+
left?: number;
|
|
320
|
+
wrap?: boolean;
|
|
321
|
+
breakBefore?: boolean;
|
|
322
|
+
minWidowLines?: number;
|
|
323
|
+
minOrphanLines?: number;
|
|
324
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@formepdf/react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "JSX-to-JSON serializer for Forme PDF engine",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest"
|
|
18
|
+
},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"react": "^18 || ^19"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/react": "^19.0.0",
|
|
24
|
+
"react": "^19.0.0",
|
|
25
|
+
"typescript": "^5.7.0",
|
|
26
|
+
"vitest": "^3.0.0"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/formepdf/forme",
|
|
35
|
+
"directory": "packages/react"
|
|
36
|
+
}
|
|
37
|
+
}
|