Skip to content

Commit 9c224ee

Browse files
authored
refactor: convert layout package to TS (diegomura#3092)
1 parent 8cb0c9b commit 9c224ee

File tree

205 files changed

+5868
-2298
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

205 files changed

+5868
-2298
lines changed

babel.config.js

-3
This file was deleted.

globals.d.ts

+245
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
declare module 'yoga-layout/load' {
2+
export enum Align {
3+
Auto = 0,
4+
FlexStart = 1,
5+
Center = 2,
6+
FlexEnd = 3,
7+
Stretch = 4,
8+
Baseline = 5,
9+
SpaceBetween = 6,
10+
SpaceAround = 7,
11+
SpaceEvenly = 8,
12+
}
13+
14+
export enum BoxSizing {
15+
BorderBox = 0,
16+
ContentBox = 1,
17+
}
18+
19+
export enum Dimension {
20+
Width = 0,
21+
Height = 1,
22+
}
23+
24+
export enum Direction {
25+
Inherit = 0,
26+
LTR = 1,
27+
RTL = 2,
28+
}
29+
30+
export enum Display {
31+
Flex = 0,
32+
None = 1,
33+
Contents = 2,
34+
}
35+
36+
export enum Edge {
37+
Left = 0,
38+
Top = 1,
39+
Right = 2,
40+
Bottom = 3,
41+
Start = 4,
42+
End = 5,
43+
Horizontal = 6,
44+
Vertical = 7,
45+
All = 8,
46+
}
47+
48+
export enum Errata {
49+
None = 0,
50+
StretchFlexBasis = 1,
51+
AbsolutePositionWithoutInsetsExcludesPadding = 2,
52+
AbsolutePercentAgainstInnerSize = 4,
53+
All = 2147483647,
54+
Classic = 2147483646,
55+
}
56+
57+
export enum ExperimentalFeature {
58+
WebFlexBasis = 0,
59+
}
60+
61+
export enum FlexDirection {
62+
Column = 0,
63+
ColumnReverse = 1,
64+
Row = 2,
65+
RowReverse = 3,
66+
}
67+
68+
export enum Gutter {
69+
Column = 0,
70+
Row = 1,
71+
All = 2,
72+
}
73+
74+
export enum Justify {
75+
FlexStart = 0,
76+
Center = 1,
77+
FlexEnd = 2,
78+
SpaceBetween = 3,
79+
SpaceAround = 4,
80+
SpaceEvenly = 5,
81+
}
82+
83+
export enum LogLevel {
84+
Error = 0,
85+
Warn = 1,
86+
Info = 2,
87+
Debug = 3,
88+
Verbose = 4,
89+
Fatal = 5,
90+
}
91+
92+
export enum MeasureMode {
93+
Undefined = 0,
94+
Exactly = 1,
95+
AtMost = 2,
96+
}
97+
98+
export enum NodeType {
99+
Default = 0,
100+
Text = 1,
101+
}
102+
103+
export enum Overflow {
104+
Visible = 0,
105+
Hidden = 1,
106+
Scroll = 2,
107+
}
108+
109+
export enum PositionType {
110+
Static = 0,
111+
Relative = 1,
112+
Absolute = 2,
113+
}
114+
115+
export enum Unit {
116+
Undefined = 0,
117+
Point = 1,
118+
Percent = 2,
119+
Auto = 3,
120+
}
121+
122+
export enum Wrap {
123+
NoWrap = 0,
124+
Wrap = 1,
125+
WrapReverse = 2,
126+
}
127+
128+
export type MeasureFunction = (
129+
width: number,
130+
widthMeasureMode: MeasureMode,
131+
height: number,
132+
heightMeasureMode: MeasureMode,
133+
) => {
134+
width?: number | undefined;
135+
height?: number | undefined;
136+
} | null;
137+
138+
export interface YogaNode {
139+
calculateLayout(
140+
width?: number,
141+
height?: number,
142+
direction?: Direction,
143+
): void;
144+
copyStyle(node: YogaNode): void;
145+
free(): void;
146+
freeRecursive(): void;
147+
getAlignContent(): Align;
148+
getAlignItems(): Align;
149+
getAlignSelf(): Align;
150+
getAspectRatio(): number;
151+
getBorder(edge: Edge): number;
152+
getChild(index: number): YogaNode;
153+
getChildCount(): number;
154+
getComputedBorder(edge: Edge): number;
155+
getComputedBottom(): number;
156+
getComputedHeight(): number;
157+
// getComputedLayout(): Layout;
158+
getComputedLeft(): number;
159+
getComputedMargin(edge: Edge): number;
160+
getComputedPadding(edge: Edge): number;
161+
getComputedRight(): number;
162+
getComputedTop(): number;
163+
getComputedWidth(): number;
164+
getDisplay(): Display;
165+
getFlexBasis(): number;
166+
getFlexDirection(): FlexDirection;
167+
getFlexGrow(): number;
168+
getFlexShrink(): number;
169+
getFlexWrap(): Wrap;
170+
getHeight(): Value;
171+
getJustifyContent(): Justify;
172+
getOverflow(): Overflow;
173+
getParent(): YogaNode | null;
174+
getPositionType(): PositionType;
175+
insertChild(child: YogaNode, index: number): void;
176+
isDirty(): boolean;
177+
markDirty(): void;
178+
removeChild(child: YogaNode): void;
179+
reset(): void;
180+
setAlignContent(alignContent: Align): void;
181+
setAlignItems(alignItems: Align): void;
182+
setAlignSelf(alignSelf: Align): void;
183+
setAspectRatio(aspectRatio: number): void;
184+
setBorder(edge: Edge, borderWidth: number): void;
185+
setDisplay(display: Display): void;
186+
setFlex(flex: number): void;
187+
setFlexBasis(flexBasis: number | string): void;
188+
setFlexBasisPercent(flexBasis: number): void;
189+
setFlexDirection(flexDirection: Direction): void;
190+
setFlexGrow(flexGrow: number): void;
191+
setFlexShrink(flexShrink: number): void;
192+
setFlexWrap(flexWrap: Wrap): void;
193+
setHeight(height: number | string): void;
194+
setHeightAuto(): void;
195+
setHeightPercent(height: number): void;
196+
setJustifyContent(justifyContent: Justify): void;
197+
setMargin(edge: Edge, margin: number | string): void;
198+
setMarginAuto(edge: Edge): void;
199+
setMarginPercent(edge: Edge, margin: number): void;
200+
setMaxHeight(maxHeight: number | string): void;
201+
setMaxHeightPercent(maxHeight: number): void;
202+
setMaxWidth(maxWidth: number | string): void;
203+
setMaxWidthPercent(maxWidth: number): void;
204+
setGap(gap: Gutter, value: number): void;
205+
setMeasureFunc(measureFunction: MeasureFunction): void;
206+
setMinHeight(minHeight: number | string): void;
207+
setMinHeightPercent(minHeight: number): void;
208+
setMinWidth(minWidth: number | string): void;
209+
setMinWidthPercent(minWidth: number): void;
210+
setOverflow(overflow: Overflow): void;
211+
setPadding(edge: Edge, padding: number | string): void;
212+
setPaddingPercent(edge: Edge, padding: number): void;
213+
setPosition(edge: Edge, position: number | string): void;
214+
setPositionPercent(edge: Edge, position: number): void;
215+
setPositionType(positionType: PositionType): void;
216+
setWidth(width: number | string): void;
217+
setWidthAuto(): void;
218+
setWidthPercent(width: number): void;
219+
unsetMeasureFunc(): void;
220+
}
221+
222+
interface YogaConfig {
223+
setPointScaleFactor(factor: number): void;
224+
}
225+
226+
interface ConfigStatic {
227+
create(): YogaConfig;
228+
destroy(config: YogaConfig): any;
229+
}
230+
231+
interface NodeStatic {
232+
create(): YogaNode;
233+
createDefault(): YogaNode;
234+
createWithConfig(config: YogaConfig): YogaNode;
235+
destroy(node: YogaNode): any;
236+
}
237+
238+
export interface Yoga {
239+
Node: NodeStatic;
240+
Config: ConfigStatic;
241+
getInstanceCount(): number;
242+
}
243+
244+
export const loadYoga: () => Promise<Yoga>;
245+
}

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
"name": "@react-pdf/layout",
33
"version": "4.2.3",
44
"license": "MIT",
5-
"description": "Resolve overall document component's layout",
5+
"description": "Resolve document component's layout",
66
"author": "Diego Muracciole <diegomuracciole@gmail.com>",
77
"homepage": "https://github.com/diegomura/react-pdf#readme",
88
"type": "module",
99
"main": "./lib/index.js",
10+
"types": "./lib/index.d.ts",
1011
"repository": {
1112
"type": "git",
1213
"url": "https://github.com/diegomura/react-pdf.git",
@@ -18,7 +19,6 @@
1819
"watch": "rimraf ./lib && rollup -c -w"
1920
},
2021
"dependencies": {
21-
"@babel/runtime": "^7.20.13",
2222
"@react-pdf/fns": "3.1.1",
2323
"@react-pdf/image": "^3.0.2",
2424
"@react-pdf/pdfkit": "^4.0.2",

rollup.config.js

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
import babel from '@rollup/plugin-babel';
1+
import typescript from '@rollup/plugin-typescript';
2+
import { dts } from 'rollup-plugin-dts';
3+
import del from 'rollup-plugin-delete';
24

35
import pkg from './package.json' with { type: 'json' };
46

5-
const config = {
6-
input: 'src/index.js',
7-
output: { format: 'es', file: 'lib/index.js' },
8-
external: Object.keys(pkg.dependencies).concat(
9-
/@babel\/runtime/,
10-
/@react-pdf/,
11-
),
12-
plugins: [
13-
babel({
14-
babelrc: true,
15-
babelHelpers: 'runtime',
16-
exclude: 'node_modules/**',
17-
}),
18-
],
19-
};
7+
const config = [
8+
{
9+
input: 'src/index.ts',
10+
output: { format: 'es', dir: 'lib' },
11+
external: Object.keys(pkg.dependencies).concat(/@react-pdf/),
12+
plugins: [typescript(), del({ targets: 'lib' })],
13+
},
14+
{
15+
input: './lib/types/index.d.ts',
16+
output: [{ file: 'lib/index.d.ts', format: 'es' }],
17+
plugins: [dts(), del({ targets: 'lib/types', hook: 'buildEnd' })],
18+
},
19+
];
2020

2121
export default config;

0 commit comments

Comments
 (0)