@mgcrea/react-native-tailwind 0.5.2 → 0.6.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/README.md +141 -10
- package/dist/babel/index.cjs +625 -111
- package/dist/components/Pressable.d.ts +2 -0
- package/dist/components/TextInput.d.ts +2 -0
- package/dist/config/palettes.d.ts +302 -0
- package/dist/config/palettes.js +1 -0
- package/dist/parser/colors.js +1 -1
- package/dist/parser/colors.test.js +1 -1
- package/dist/parser/index.d.ts +1 -0
- package/dist/parser/index.js +1 -1
- package/dist/parser/layout.js +1 -1
- package/dist/parser/layout.test.js +1 -1
- package/dist/parser/transforms.d.ts +13 -0
- package/dist/parser/transforms.js +1 -0
- package/dist/parser/transforms.test.js +1 -0
- package/dist/parser/typography.js +1 -1
- package/dist/parser/typography.test.js +1 -1
- package/dist/types.d.ts +32 -2
- package/package.json +1 -1
- package/src/components/Pressable.tsx +1 -0
- package/src/components/TextInput.tsx +1 -0
- package/src/config/palettes.ts +304 -0
- package/src/parser/colors.test.ts +57 -31
- package/src/parser/colors.ts +34 -111
- package/src/parser/index.ts +3 -0
- package/src/parser/layout.test.ts +35 -0
- package/src/parser/layout.ts +26 -0
- package/src/parser/transforms.test.ts +318 -0
- package/src/parser/transforms.ts +406 -0
- package/src/parser/typography.test.ts +12 -0
- package/src/parser/typography.ts +8 -0
- package/src/types.ts +22 -1
|
@@ -199,6 +199,41 @@ describe("parseLayout - overflow utilities", () => {
|
|
|
199
199
|
});
|
|
200
200
|
});
|
|
201
201
|
|
|
202
|
+
describe("parseLayout - opacity utilities", () => {
|
|
203
|
+
it("should parse opacity-0 (fully transparent)", () => {
|
|
204
|
+
expect(parseLayout("opacity-0")).toEqual({ opacity: 0 });
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it("should parse opacity-50 (half transparent)", () => {
|
|
208
|
+
expect(parseLayout("opacity-50")).toEqual({ opacity: 0.5 });
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("should parse opacity-100 (fully opaque)", () => {
|
|
212
|
+
expect(parseLayout("opacity-100")).toEqual({ opacity: 1 });
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it("should parse all opacity values", () => {
|
|
216
|
+
expect(parseLayout("opacity-5")).toEqual({ opacity: 0.05 });
|
|
217
|
+
expect(parseLayout("opacity-10")).toEqual({ opacity: 0.1 });
|
|
218
|
+
expect(parseLayout("opacity-15")).toEqual({ opacity: 0.15 });
|
|
219
|
+
expect(parseLayout("opacity-20")).toEqual({ opacity: 0.2 });
|
|
220
|
+
expect(parseLayout("opacity-25")).toEqual({ opacity: 0.25 });
|
|
221
|
+
expect(parseLayout("opacity-30")).toEqual({ opacity: 0.3 });
|
|
222
|
+
expect(parseLayout("opacity-35")).toEqual({ opacity: 0.35 });
|
|
223
|
+
expect(parseLayout("opacity-40")).toEqual({ opacity: 0.4 });
|
|
224
|
+
expect(parseLayout("opacity-45")).toEqual({ opacity: 0.45 });
|
|
225
|
+
expect(parseLayout("opacity-55")).toEqual({ opacity: 0.55 });
|
|
226
|
+
expect(parseLayout("opacity-60")).toEqual({ opacity: 0.6 });
|
|
227
|
+
expect(parseLayout("opacity-65")).toEqual({ opacity: 0.65 });
|
|
228
|
+
expect(parseLayout("opacity-70")).toEqual({ opacity: 0.7 });
|
|
229
|
+
expect(parseLayout("opacity-75")).toEqual({ opacity: 0.75 });
|
|
230
|
+
expect(parseLayout("opacity-80")).toEqual({ opacity: 0.8 });
|
|
231
|
+
expect(parseLayout("opacity-85")).toEqual({ opacity: 0.85 });
|
|
232
|
+
expect(parseLayout("opacity-90")).toEqual({ opacity: 0.9 });
|
|
233
|
+
expect(parseLayout("opacity-95")).toEqual({ opacity: 0.95 });
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
|
|
202
237
|
describe("parseLayout - edge cases", () => {
|
|
203
238
|
it("should return null for invalid classes", () => {
|
|
204
239
|
expect(parseLayout("invalid")).toBeNull();
|
package/src/parser/layout.ts
CHANGED
|
@@ -146,6 +146,31 @@ const OVERFLOW_MAP: Record<string, StyleObject> = {
|
|
|
146
146
|
"overflow-scroll": { overflow: "scroll" },
|
|
147
147
|
};
|
|
148
148
|
|
|
149
|
+
// Opacity utilities
|
|
150
|
+
const OPACITY_MAP: Record<string, StyleObject> = {
|
|
151
|
+
"opacity-0": { opacity: 0 },
|
|
152
|
+
"opacity-5": { opacity: 0.05 },
|
|
153
|
+
"opacity-10": { opacity: 0.1 },
|
|
154
|
+
"opacity-15": { opacity: 0.15 },
|
|
155
|
+
"opacity-20": { opacity: 0.2 },
|
|
156
|
+
"opacity-25": { opacity: 0.25 },
|
|
157
|
+
"opacity-30": { opacity: 0.3 },
|
|
158
|
+
"opacity-35": { opacity: 0.35 },
|
|
159
|
+
"opacity-40": { opacity: 0.4 },
|
|
160
|
+
"opacity-45": { opacity: 0.45 },
|
|
161
|
+
"opacity-50": { opacity: 0.5 },
|
|
162
|
+
"opacity-55": { opacity: 0.55 },
|
|
163
|
+
"opacity-60": { opacity: 0.6 },
|
|
164
|
+
"opacity-65": { opacity: 0.65 },
|
|
165
|
+
"opacity-70": { opacity: 0.7 },
|
|
166
|
+
"opacity-75": { opacity: 0.75 },
|
|
167
|
+
"opacity-80": { opacity: 0.8 },
|
|
168
|
+
"opacity-85": { opacity: 0.85 },
|
|
169
|
+
"opacity-90": { opacity: 0.9 },
|
|
170
|
+
"opacity-95": { opacity: 0.95 },
|
|
171
|
+
"opacity-100": { opacity: 1 },
|
|
172
|
+
};
|
|
173
|
+
|
|
149
174
|
// Z-index scale
|
|
150
175
|
export const Z_INDEX_SCALE: Record<string, number> = {
|
|
151
176
|
0: 0,
|
|
@@ -343,6 +368,7 @@ export function parseLayout(cls: string): StyleObject | null {
|
|
|
343
368
|
ALIGN_CONTENT_MAP[cls] ??
|
|
344
369
|
POSITION_MAP[cls] ??
|
|
345
370
|
OVERFLOW_MAP[cls] ??
|
|
371
|
+
OPACITY_MAP[cls] ??
|
|
346
372
|
null
|
|
347
373
|
);
|
|
348
374
|
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { PERSPECTIVE_SCALE, ROTATE_MAP, SCALE_MAP, SKEW_MAP, parseTransform } from "./transforms";
|
|
3
|
+
|
|
4
|
+
describe("SCALE_MAP", () => {
|
|
5
|
+
it("should export complete scale map", () => {
|
|
6
|
+
expect(SCALE_MAP).toMatchSnapshot();
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
describe("ROTATE_MAP", () => {
|
|
11
|
+
it("should export complete rotate map", () => {
|
|
12
|
+
expect(ROTATE_MAP).toMatchSnapshot();
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
describe("SKEW_MAP", () => {
|
|
17
|
+
it("should export complete skew map", () => {
|
|
18
|
+
expect(SKEW_MAP).toMatchSnapshot();
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe("PERSPECTIVE_SCALE", () => {
|
|
23
|
+
it("should export complete perspective scale", () => {
|
|
24
|
+
expect(PERSPECTIVE_SCALE).toMatchSnapshot();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
describe("parseTransform - scale utilities", () => {
|
|
29
|
+
it("should parse scale values", () => {
|
|
30
|
+
expect(parseTransform("scale-0")).toEqual({ transform: [{ scale: 0 }] });
|
|
31
|
+
expect(parseTransform("scale-50")).toEqual({ transform: [{ scale: 0.5 }] });
|
|
32
|
+
expect(parseTransform("scale-75")).toEqual({ transform: [{ scale: 0.75 }] });
|
|
33
|
+
expect(parseTransform("scale-90")).toEqual({ transform: [{ scale: 0.9 }] });
|
|
34
|
+
expect(parseTransform("scale-95")).toEqual({ transform: [{ scale: 0.95 }] });
|
|
35
|
+
expect(parseTransform("scale-100")).toEqual({ transform: [{ scale: 1 }] });
|
|
36
|
+
expect(parseTransform("scale-105")).toEqual({ transform: [{ scale: 1.05 }] });
|
|
37
|
+
expect(parseTransform("scale-110")).toEqual({ transform: [{ scale: 1.1 }] });
|
|
38
|
+
expect(parseTransform("scale-125")).toEqual({ transform: [{ scale: 1.25 }] });
|
|
39
|
+
expect(parseTransform("scale-150")).toEqual({ transform: [{ scale: 1.5 }] });
|
|
40
|
+
expect(parseTransform("scale-200")).toEqual({ transform: [{ scale: 2 }] });
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("should parse scaleX values", () => {
|
|
44
|
+
expect(parseTransform("scale-x-0")).toEqual({ transform: [{ scaleX: 0 }] });
|
|
45
|
+
expect(parseTransform("scale-x-50")).toEqual({ transform: [{ scaleX: 0.5 }] });
|
|
46
|
+
expect(parseTransform("scale-x-100")).toEqual({ transform: [{ scaleX: 1 }] });
|
|
47
|
+
expect(parseTransform("scale-x-150")).toEqual({ transform: [{ scaleX: 1.5 }] });
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("should parse scaleY values", () => {
|
|
51
|
+
expect(parseTransform("scale-y-0")).toEqual({ transform: [{ scaleY: 0 }] });
|
|
52
|
+
expect(parseTransform("scale-y-75")).toEqual({ transform: [{ scaleY: 0.75 }] });
|
|
53
|
+
expect(parseTransform("scale-y-100")).toEqual({ transform: [{ scaleY: 1 }] });
|
|
54
|
+
expect(parseTransform("scale-y-125")).toEqual({ transform: [{ scaleY: 1.25 }] });
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("should parse arbitrary scale values", () => {
|
|
58
|
+
expect(parseTransform("scale-[1.23]")).toEqual({ transform: [{ scale: 1.23 }] });
|
|
59
|
+
expect(parseTransform("scale-[0.5]")).toEqual({ transform: [{ scale: 0.5 }] });
|
|
60
|
+
expect(parseTransform("scale-[2.5]")).toEqual({ transform: [{ scale: 2.5 }] });
|
|
61
|
+
expect(parseTransform("scale-x-[1.5]")).toEqual({ transform: [{ scaleX: 1.5 }] });
|
|
62
|
+
expect(parseTransform("scale-y-[0.8]")).toEqual({ transform: [{ scaleY: 0.8 }] });
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("should parse negative arbitrary scale values", () => {
|
|
66
|
+
expect(parseTransform("scale-[-1]")).toEqual({ transform: [{ scale: -1 }] });
|
|
67
|
+
expect(parseTransform("scale-x-[-0.5]")).toEqual({ transform: [{ scaleX: -0.5 }] });
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("should return null for invalid scale values", () => {
|
|
71
|
+
expect(parseTransform("scale-999")).toBeNull();
|
|
72
|
+
expect(parseTransform("scale-invalid")).toBeNull();
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe("parseTransform - rotate utilities", () => {
|
|
77
|
+
it("should parse rotate values", () => {
|
|
78
|
+
expect(parseTransform("rotate-0")).toEqual({ transform: [{ rotate: "0deg" }] });
|
|
79
|
+
expect(parseTransform("rotate-1")).toEqual({ transform: [{ rotate: "1deg" }] });
|
|
80
|
+
expect(parseTransform("rotate-45")).toEqual({ transform: [{ rotate: "45deg" }] });
|
|
81
|
+
expect(parseTransform("rotate-90")).toEqual({ transform: [{ rotate: "90deg" }] });
|
|
82
|
+
expect(parseTransform("rotate-180")).toEqual({ transform: [{ rotate: "180deg" }] });
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("should parse negative rotate values", () => {
|
|
86
|
+
expect(parseTransform("-rotate-45")).toEqual({ transform: [{ rotate: "-45deg" }] });
|
|
87
|
+
expect(parseTransform("-rotate-90")).toEqual({ transform: [{ rotate: "-90deg" }] });
|
|
88
|
+
expect(parseTransform("-rotate-180")).toEqual({ transform: [{ rotate: "-180deg" }] });
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("should parse arbitrary rotate values", () => {
|
|
92
|
+
expect(parseTransform("rotate-[37deg]")).toEqual({ transform: [{ rotate: "37deg" }] });
|
|
93
|
+
expect(parseTransform("rotate-[15.5deg]")).toEqual({ transform: [{ rotate: "15.5deg" }] });
|
|
94
|
+
expect(parseTransform("-rotate-[15deg]")).toEqual({ transform: [{ rotate: "-15deg" }] });
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("should parse rotateX values", () => {
|
|
98
|
+
expect(parseTransform("rotate-x-45")).toEqual({ transform: [{ rotateX: "45deg" }] });
|
|
99
|
+
expect(parseTransform("rotate-x-90")).toEqual({ transform: [{ rotateX: "90deg" }] });
|
|
100
|
+
expect(parseTransform("-rotate-x-45")).toEqual({ transform: [{ rotateX: "-45deg" }] });
|
|
101
|
+
expect(parseTransform("rotate-x-[30deg]")).toEqual({ transform: [{ rotateX: "30deg" }] });
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("should parse rotateY values", () => {
|
|
105
|
+
expect(parseTransform("rotate-y-45")).toEqual({ transform: [{ rotateY: "45deg" }] });
|
|
106
|
+
expect(parseTransform("rotate-y-180")).toEqual({ transform: [{ rotateY: "180deg" }] });
|
|
107
|
+
expect(parseTransform("-rotate-y-90")).toEqual({ transform: [{ rotateY: "-90deg" }] });
|
|
108
|
+
expect(parseTransform("rotate-y-[60deg]")).toEqual({ transform: [{ rotateY: "60deg" }] });
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("should parse rotateZ values", () => {
|
|
112
|
+
expect(parseTransform("rotate-z-45")).toEqual({ transform: [{ rotateZ: "45deg" }] });
|
|
113
|
+
expect(parseTransform("rotate-z-90")).toEqual({ transform: [{ rotateZ: "90deg" }] });
|
|
114
|
+
expect(parseTransform("-rotate-z-12")).toEqual({ transform: [{ rotateZ: "-12deg" }] });
|
|
115
|
+
expect(parseTransform("rotate-z-[75deg]")).toEqual({ transform: [{ rotateZ: "75deg" }] });
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("should return null for invalid rotate values", () => {
|
|
119
|
+
expect(parseTransform("rotate-999")).toBeNull();
|
|
120
|
+
expect(parseTransform("rotate-invalid")).toBeNull();
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe("parseTransform - translate utilities", () => {
|
|
125
|
+
it("should parse translateX values", () => {
|
|
126
|
+
expect(parseTransform("translate-x-0")).toEqual({ transform: [{ translateX: 0 }] });
|
|
127
|
+
expect(parseTransform("translate-x-4")).toEqual({ transform: [{ translateX: 16 }] });
|
|
128
|
+
expect(parseTransform("translate-x-8")).toEqual({ transform: [{ translateX: 32 }] });
|
|
129
|
+
expect(parseTransform("translate-x-16")).toEqual({ transform: [{ translateX: 64 }] });
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it("should parse negative translateX values", () => {
|
|
133
|
+
expect(parseTransform("-translate-x-4")).toEqual({ transform: [{ translateX: -16 }] });
|
|
134
|
+
expect(parseTransform("-translate-x-8")).toEqual({ transform: [{ translateX: -32 }] });
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("should parse translateY values", () => {
|
|
138
|
+
expect(parseTransform("translate-y-0")).toEqual({ transform: [{ translateY: 0 }] });
|
|
139
|
+
expect(parseTransform("translate-y-4")).toEqual({ transform: [{ translateY: 16 }] });
|
|
140
|
+
expect(parseTransform("translate-y-12")).toEqual({ transform: [{ translateY: 48 }] });
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("should parse negative translateY values", () => {
|
|
144
|
+
expect(parseTransform("-translate-y-4")).toEqual({ transform: [{ translateY: -16 }] });
|
|
145
|
+
expect(parseTransform("-translate-y-10")).toEqual({ transform: [{ translateY: -40 }] });
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("should parse arbitrary translateX pixel values", () => {
|
|
149
|
+
expect(parseTransform("translate-x-[123px]")).toEqual({ transform: [{ translateX: 123 }] });
|
|
150
|
+
expect(parseTransform("translate-x-[50]")).toEqual({ transform: [{ translateX: 50 }] });
|
|
151
|
+
expect(parseTransform("-translate-x-[100px]")).toEqual({ transform: [{ translateX: -100 }] });
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it("should parse arbitrary translateX percentage values", () => {
|
|
155
|
+
expect(parseTransform("translate-x-[50%]")).toEqual({ transform: [{ translateX: "50%" }] });
|
|
156
|
+
expect(parseTransform("translate-x-[33.333%]")).toEqual({ transform: [{ translateX: "33.333%" }] });
|
|
157
|
+
expect(parseTransform("-translate-x-[25%]")).toEqual({ transform: [{ translateX: "-25%" }] });
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it("should parse arbitrary translateY pixel values", () => {
|
|
161
|
+
expect(parseTransform("translate-y-[200px]")).toEqual({ transform: [{ translateY: 200 }] });
|
|
162
|
+
expect(parseTransform("-translate-y-[75px]")).toEqual({ transform: [{ translateY: -75 }] });
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("should parse arbitrary translateY percentage values", () => {
|
|
166
|
+
expect(parseTransform("translate-y-[100%]")).toEqual({ transform: [{ translateY: "100%" }] });
|
|
167
|
+
expect(parseTransform("-translate-y-[50%]")).toEqual({ transform: [{ translateY: "-50%" }] });
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("should return null for invalid translate values", () => {
|
|
171
|
+
expect(parseTransform("translate-x-999")).toBeNull();
|
|
172
|
+
expect(parseTransform("translate-y-invalid")).toBeNull();
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
describe("parseTransform - skew utilities", () => {
|
|
177
|
+
it("should parse skewX values", () => {
|
|
178
|
+
expect(parseTransform("skew-x-0")).toEqual({ transform: [{ skewX: "0deg" }] });
|
|
179
|
+
expect(parseTransform("skew-x-1")).toEqual({ transform: [{ skewX: "1deg" }] });
|
|
180
|
+
expect(parseTransform("skew-x-3")).toEqual({ transform: [{ skewX: "3deg" }] });
|
|
181
|
+
expect(parseTransform("skew-x-6")).toEqual({ transform: [{ skewX: "6deg" }] });
|
|
182
|
+
expect(parseTransform("skew-x-12")).toEqual({ transform: [{ skewX: "12deg" }] });
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it("should parse negative skewX values", () => {
|
|
186
|
+
expect(parseTransform("-skew-x-3")).toEqual({ transform: [{ skewX: "-3deg" }] });
|
|
187
|
+
expect(parseTransform("-skew-x-12")).toEqual({ transform: [{ skewX: "-12deg" }] });
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it("should parse skewY values", () => {
|
|
191
|
+
expect(parseTransform("skew-y-0")).toEqual({ transform: [{ skewY: "0deg" }] });
|
|
192
|
+
expect(parseTransform("skew-y-2")).toEqual({ transform: [{ skewY: "2deg" }] });
|
|
193
|
+
expect(parseTransform("skew-y-6")).toEqual({ transform: [{ skewY: "6deg" }] });
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it("should parse negative skewY values", () => {
|
|
197
|
+
expect(parseTransform("-skew-y-2")).toEqual({ transform: [{ skewY: "-2deg" }] });
|
|
198
|
+
expect(parseTransform("-skew-y-6")).toEqual({ transform: [{ skewY: "-6deg" }] });
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it("should parse arbitrary skew values", () => {
|
|
202
|
+
expect(parseTransform("skew-x-[15deg]")).toEqual({ transform: [{ skewX: "15deg" }] });
|
|
203
|
+
expect(parseTransform("skew-y-[20deg]")).toEqual({ transform: [{ skewY: "20deg" }] });
|
|
204
|
+
expect(parseTransform("-skew-x-[8deg]")).toEqual({ transform: [{ skewX: "-8deg" }] });
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it("should return null for invalid skew values", () => {
|
|
208
|
+
expect(parseTransform("skew-x-999")).toBeNull();
|
|
209
|
+
expect(parseTransform("skew-y-invalid")).toBeNull();
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
describe("parseTransform - perspective utility", () => {
|
|
214
|
+
it("should parse perspective values", () => {
|
|
215
|
+
expect(parseTransform("perspective-0")).toEqual({ transform: [{ perspective: 0 }] });
|
|
216
|
+
expect(parseTransform("perspective-100")).toEqual({ transform: [{ perspective: 100 }] });
|
|
217
|
+
expect(parseTransform("perspective-500")).toEqual({ transform: [{ perspective: 500 }] });
|
|
218
|
+
expect(parseTransform("perspective-1000")).toEqual({ transform: [{ perspective: 1000 }] });
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it("should parse arbitrary perspective values", () => {
|
|
222
|
+
expect(parseTransform("perspective-[1500]")).toEqual({ transform: [{ perspective: 1500 }] });
|
|
223
|
+
expect(parseTransform("perspective-[2000]")).toEqual({ transform: [{ perspective: 2000 }] });
|
|
224
|
+
expect(parseTransform("perspective-[250]")).toEqual({ transform: [{ perspective: 250 }] });
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it("should return null for invalid perspective values", () => {
|
|
228
|
+
expect(parseTransform("perspective-99")).toBeNull();
|
|
229
|
+
expect(parseTransform("perspective-invalid")).toBeNull();
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
describe("parseTransform - transform origin warning", () => {
|
|
234
|
+
it("should return null and warn for origin classes", () => {
|
|
235
|
+
// Note: warnings are logged in development, testing null return is sufficient
|
|
236
|
+
expect(parseTransform("origin-center")).toBeNull();
|
|
237
|
+
expect(parseTransform("origin-top")).toBeNull();
|
|
238
|
+
expect(parseTransform("origin-left")).toBeNull();
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
describe("parseTransform - edge cases", () => {
|
|
243
|
+
it("should return null for invalid classes", () => {
|
|
244
|
+
expect(parseTransform("invalid")).toBeNull();
|
|
245
|
+
expect(parseTransform("transform")).toBeNull();
|
|
246
|
+
expect(parseTransform("transforms")).toBeNull();
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it("should return null for empty string", () => {
|
|
250
|
+
expect(parseTransform("")).toBeNull();
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it("should return null for partial class names", () => {
|
|
254
|
+
expect(parseTransform("scal")).toBeNull();
|
|
255
|
+
expect(parseTransform("rotat")).toBeNull();
|
|
256
|
+
expect(parseTransform("translat")).toBeNull();
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it("should handle all transform types returning arrays", () => {
|
|
260
|
+
// Verify all transforms return arrays (required for React Native)
|
|
261
|
+
const scaleResult = parseTransform("scale-110");
|
|
262
|
+
expect(scaleResult).toHaveProperty("transform");
|
|
263
|
+
expect(Array.isArray(scaleResult?.transform)).toBe(true);
|
|
264
|
+
|
|
265
|
+
const rotateResult = parseTransform("rotate-45");
|
|
266
|
+
expect(rotateResult).toHaveProperty("transform");
|
|
267
|
+
expect(Array.isArray(rotateResult?.transform)).toBe(true);
|
|
268
|
+
|
|
269
|
+
const translateResult = parseTransform("translate-x-4");
|
|
270
|
+
expect(translateResult).toHaveProperty("transform");
|
|
271
|
+
expect(Array.isArray(translateResult?.transform)).toBe(true);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
describe("parseTransform - comprehensive coverage", () => {
|
|
276
|
+
it("should handle all scale variants", () => {
|
|
277
|
+
const scaleClasses = ["scale-0", "scale-50", "scale-100", "scale-150"];
|
|
278
|
+
scaleClasses.forEach((cls) => {
|
|
279
|
+
expect(parseTransform(cls)).toBeTruthy();
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it("should handle all rotate variants", () => {
|
|
284
|
+
const rotateClasses = ["rotate-0", "rotate-45", "rotate-90", "rotate-180"];
|
|
285
|
+
rotateClasses.forEach((cls) => {
|
|
286
|
+
expect(parseTransform(cls)).toBeTruthy();
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
it("should handle all translate variants", () => {
|
|
291
|
+
const translateClasses = ["translate-x-0", "translate-x-4", "translate-y-8", "-translate-x-2"];
|
|
292
|
+
translateClasses.forEach((cls) => {
|
|
293
|
+
expect(parseTransform(cls)).toBeTruthy();
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it("should handle all skew variants", () => {
|
|
298
|
+
const skewClasses = ["skew-x-3", "skew-y-6", "-skew-x-12"];
|
|
299
|
+
skewClasses.forEach((cls) => {
|
|
300
|
+
expect(parseTransform(cls)).toBeTruthy();
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
it("should handle all perspective variants", () => {
|
|
305
|
+
const perspectiveClasses = ["perspective-100", "perspective-500", "perspective-1000"];
|
|
306
|
+
perspectiveClasses.forEach((cls) => {
|
|
307
|
+
expect(parseTransform(cls)).toBeTruthy();
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
describe("parseTransform - case sensitivity", () => {
|
|
313
|
+
it("should be case-sensitive", () => {
|
|
314
|
+
expect(parseTransform("SCALE-110")).toBeNull();
|
|
315
|
+
expect(parseTransform("Scale-110")).toBeNull();
|
|
316
|
+
expect(parseTransform("ROTATE-45")).toBeNull();
|
|
317
|
+
});
|
|
318
|
+
});
|