@mgcrea/react-native-tailwind 0.5.1 → 0.6.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.
@@ -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
+ });