@colimuca123/nativewind 4.2.2-rc.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.
Files changed (146) hide show
  1. package/LICENSE +21 -0
  2. package/README.OpenSource +11 -0
  3. package/babel.js +1 -0
  4. package/dist/doctor.d.ts +1 -0
  5. package/dist/doctor.js +21 -0
  6. package/dist/doctor.js.map +1 -0
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.js +20 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/metro/common.d.ts +4 -0
  11. package/dist/metro/common.js +8 -0
  12. package/dist/metro/common.js.map +1 -0
  13. package/dist/metro/index.d.ts +15 -0
  14. package/dist/metro/index.js +47 -0
  15. package/dist/metro/index.js.map +1 -0
  16. package/dist/metro/picocolors.d.ts +26 -0
  17. package/dist/metro/picocolors.js +53 -0
  18. package/dist/metro/picocolors.js.map +1 -0
  19. package/dist/metro/tailwind/index.d.ts +5 -0
  20. package/dist/metro/tailwind/index.js +25 -0
  21. package/dist/metro/tailwind/index.js.map +1 -0
  22. package/dist/metro/tailwind/types.d.ts +8 -0
  23. package/dist/metro/tailwind/types.js +3 -0
  24. package/dist/metro/tailwind/types.js.map +1 -0
  25. package/dist/metro/tailwind/v3/child.d.ts +0 -0
  26. package/dist/metro/tailwind/v3/child.js +45 -0
  27. package/dist/metro/tailwind/v3/child.js.map +1 -0
  28. package/dist/metro/tailwind/v3/index.d.ts +6 -0
  29. package/dist/metro/tailwind/v3/index.js +81 -0
  30. package/dist/metro/tailwind/v3/index.js.map +1 -0
  31. package/dist/metro/typescript.d.ts +1 -0
  32. package/dist/metro/typescript.js +46 -0
  33. package/dist/metro/typescript.js.map +1 -0
  34. package/dist/stylesheet.d.ts +5 -0
  35. package/dist/stylesheet.js +25 -0
  36. package/dist/stylesheet.js.map +1 -0
  37. package/dist/tailwind/color.d.ts +4 -0
  38. package/dist/tailwind/color.js +25 -0
  39. package/dist/tailwind/color.js.map +1 -0
  40. package/dist/tailwind/common.d.ts +2 -0
  41. package/dist/tailwind/common.js +24 -0
  42. package/dist/tailwind/common.js.map +1 -0
  43. package/dist/tailwind/dark-mode.d.ts +4 -0
  44. package/dist/tailwind/dark-mode.js +48 -0
  45. package/dist/tailwind/dark-mode.js.map +1 -0
  46. package/dist/tailwind/index.d.ts +0 -0
  47. package/dist/tailwind/index.js +13 -0
  48. package/dist/tailwind/index.js.map +1 -0
  49. package/dist/tailwind/native.d.ts +3 -0
  50. package/dist/tailwind/native.js +265 -0
  51. package/dist/tailwind/native.js.map +1 -0
  52. package/dist/tailwind/prop-modifier.d.ts +4 -0
  53. package/dist/tailwind/prop-modifier.js +13 -0
  54. package/dist/tailwind/prop-modifier.js.map +1 -0
  55. package/dist/tailwind/safe-area.d.ts +4 -0
  56. package/dist/tailwind/safe-area.js +216 -0
  57. package/dist/tailwind/safe-area.js.map +1 -0
  58. package/dist/tailwind/shadows.d.ts +4 -0
  59. package/dist/tailwind/shadows.js +79 -0
  60. package/dist/tailwind/shadows.js.map +1 -0
  61. package/dist/tailwind/switch.d.ts +8 -0
  62. package/dist/tailwind/switch.js +51 -0
  63. package/dist/tailwind/switch.js.map +1 -0
  64. package/dist/tailwind/translate.d.ts +2 -0
  65. package/dist/tailwind/translate.js +40 -0
  66. package/dist/tailwind/translate.js.map +1 -0
  67. package/dist/tailwind/verify.d.ts +4 -0
  68. package/dist/tailwind/verify.js +22 -0
  69. package/dist/tailwind/verify.js.map +1 -0
  70. package/dist/tailwind/web.d.ts +3 -0
  71. package/dist/tailwind/web.js +40 -0
  72. package/dist/tailwind/web.js.map +1 -0
  73. package/dist/test.d.ts +373 -0
  74. package/dist/test.js +161 -0
  75. package/dist/test.js.map +1 -0
  76. package/dist/theme.d.ts +1 -0
  77. package/dist/theme.js +9 -0
  78. package/dist/theme.js.map +1 -0
  79. package/expo-snack.js +71 -0
  80. package/jsx-dev-runtime/index.d.ts +1 -0
  81. package/jsx-dev-runtime/index.js +1 -0
  82. package/jsx-runtime/index.d.ts +1 -0
  83. package/jsx-runtime/index.js +1 -0
  84. package/metro/package.json +1 -0
  85. package/package.json +75 -0
  86. package/preset/package.json +3 -0
  87. package/src/__tests__/README.md +3 -0
  88. package/src/__tests__/accessibility.tsx +41 -0
  89. package/src/__tests__/backgrounds.tsx +239 -0
  90. package/src/__tests__/borders.tsx +355 -0
  91. package/src/__tests__/container-queries.tsx +59 -0
  92. package/src/__tests__/custom-theme.tsx +45 -0
  93. package/src/__tests__/custom.tsx +17 -0
  94. package/src/__tests__/dark-mode.ios.tsx +251 -0
  95. package/src/__tests__/doctor.tsx +13 -0
  96. package/src/__tests__/effects.ios.tsx +230 -0
  97. package/src/__tests__/elevation.tsx +22 -0
  98. package/src/__tests__/filters.tsx +201 -0
  99. package/src/__tests__/flexbox-grid.tsx +670 -0
  100. package/src/__tests__/groups.tsx +134 -0
  101. package/src/__tests__/interactivity.tsx +547 -0
  102. package/src/__tests__/layout.tsx +854 -0
  103. package/src/__tests__/modifier-{}.tsx +71 -0
  104. package/src/__tests__/platform-modifiers-test.ios.tsx +34 -0
  105. package/src/__tests__/preset.tsx +9 -0
  106. package/src/__tests__/reusing-styles.tsx +44 -0
  107. package/src/__tests__/safe-area.test.ios.tsx +427 -0
  108. package/src/__tests__/sizing.tsx +241 -0
  109. package/src/__tests__/spacing.tsx +106 -0
  110. package/src/__tests__/states.tsx +145 -0
  111. package/src/__tests__/svg.tsx +25 -0
  112. package/src/__tests__/tables.tsx +103 -0
  113. package/src/__tests__/theme.tsx +245 -0
  114. package/src/__tests__/transforms.tsx +509 -0
  115. package/src/__tests__/transition-animations.tsx +254 -0
  116. package/src/__tests__/typography.tsx +657 -0
  117. package/src/__tests__/unofficial-plugins.test.ios.tsx +171 -0
  118. package/src/doctor.ts +28 -0
  119. package/src/index.tsx +16 -0
  120. package/src/metro/common.ts +11 -0
  121. package/src/metro/index.ts +77 -0
  122. package/src/metro/picocolors.ts +76 -0
  123. package/src/metro/tailwind/index.ts +22 -0
  124. package/src/metro/tailwind/types.ts +9 -0
  125. package/src/metro/tailwind/v3/child.ts +61 -0
  126. package/src/metro/tailwind/v3/index.ts +103 -0
  127. package/src/metro/typescript.ts +69 -0
  128. package/src/stylesheet.ts +31 -0
  129. package/src/tailwind/color.ts +23 -0
  130. package/src/tailwind/common.ts +26 -0
  131. package/src/tailwind/dark-mode.ts +46 -0
  132. package/src/tailwind/index.ts +15 -0
  133. package/src/tailwind/native.ts +374 -0
  134. package/src/tailwind/prop-modifier.ts +7 -0
  135. package/src/tailwind/safe-area.ts +262 -0
  136. package/src/tailwind/shadows.ts +100 -0
  137. package/src/tailwind/switch.ts +59 -0
  138. package/src/tailwind/translate.ts +51 -0
  139. package/src/tailwind/verify.ts +16 -0
  140. package/src/tailwind/web.ts +38 -0
  141. package/src/tailwindcss-internals.d.ts +7 -0
  142. package/src/test.tsx +224 -0
  143. package/src/theme.ts +15 -0
  144. package/test/package.json +4 -0
  145. package/theme/package.json +3 -0
  146. package/types.d.ts +1 -0
@@ -0,0 +1,254 @@
1
+ /** @jsxImportSource nativewind */
2
+ import { View } from "react-native";
3
+
4
+ import { getAnimatedStyle } from "react-native-reanimated";
5
+ import { opacity } from "react-native-reanimated/lib/typescript/reanimated2/Colors";
6
+
7
+ import { render, screen } from "../test";
8
+
9
+ const testID = "test-id";
10
+
11
+ // Default transition duration is 150ms
12
+
13
+ jest.useFakeTimers();
14
+
15
+ test("transition-colors", async () => {
16
+ await render(
17
+ <View
18
+ testID={testID}
19
+ className="transition-colors ease-linear bg-red-500 border-black"
20
+ />,
21
+ {
22
+ config: {
23
+ safelist: ["bg-blue-500 border-slate-500"],
24
+ },
25
+ },
26
+ );
27
+
28
+ let component = screen.getByTestId(testID);
29
+
30
+ // Should have a static color, and should not animate
31
+ expect(getAnimatedStyle(component)).toStrictEqual({
32
+ backgroundColor: "#ef4444",
33
+ borderColor: "#000000",
34
+ });
35
+ jest.advanceTimersByTime(300);
36
+ expect(getAnimatedStyle(component)).toStrictEqual({
37
+ backgroundColor: "#ef4444",
38
+ borderColor: "#000000",
39
+ });
40
+
41
+ // Rerender with a new color, triggering the animation
42
+ screen.rerender(
43
+ <View
44
+ testID={testID}
45
+ className="transition-colors ease-linear bg-blue-500 border-slate-500"
46
+ />,
47
+ );
48
+
49
+ // Directly after rerender, should still have the old color
50
+ expect(getAnimatedStyle(component)).toStrictEqual({
51
+ backgroundColor: "#ef4444",
52
+ borderColor: "#000000",
53
+ });
54
+
55
+ // Bg-Color should only change after we advance time
56
+ jest.advanceTimersByTime(76); // Transition half the time
57
+ expect(getAnimatedStyle(component)).toStrictEqual({
58
+ backgroundColor: "rgba(178, 105, 184, 1)",
59
+ borderColor: "rgba(73, 85, 101, 1)",
60
+ });
61
+
62
+ // At the end of the transition
63
+ jest.advanceTimersByTime(1000);
64
+ expect(getAnimatedStyle(component)).toStrictEqual({
65
+ backgroundColor: "rgba(59, 130, 246, 1)",
66
+ borderColor: "rgba(100, 116, 139, 1)",
67
+ });
68
+
69
+ // Bg-Color should not change after the transition is done
70
+ jest.advanceTimersByTime(500);
71
+ expect(getAnimatedStyle(component)).toStrictEqual({
72
+ backgroundColor: "rgba(59, 130, 246, 1)",
73
+ borderColor: "rgba(100, 116, 139, 1)",
74
+ });
75
+ });
76
+
77
+ test("transition-opacity", async () => {
78
+ await render(
79
+ <View
80
+ testID={testID}
81
+ className="transition-opacity ease-linear opacity-0"
82
+ />,
83
+ {
84
+ config: {
85
+ safelist: ["opacity-100"],
86
+ },
87
+ },
88
+ );
89
+
90
+ let component = screen.getByTestId(testID);
91
+
92
+ expect(getAnimatedStyle(component)).toStrictEqual({ opacity: 0 });
93
+ jest.advanceTimersByTime(300);
94
+ expect(getAnimatedStyle(component)).toStrictEqual({ opacity: 0 });
95
+
96
+ // Rerender with a new color, triggering the animation
97
+ screen.rerender(
98
+ <View
99
+ testID={testID}
100
+ className="transition-opacity ease-linear opacity-100"
101
+ />,
102
+ );
103
+
104
+ // Directly after rerender, should still have the old color
105
+ expect(getAnimatedStyle(component)).toStrictEqual({ opacity: 0 });
106
+
107
+ // Bg-Color should only change after we advance time
108
+ jest.advanceTimersByTime(76); // Transition half the time
109
+ expect(getAnimatedStyle(component)).toStrictEqual({ opacity: 0.5 });
110
+
111
+ // At the end of the transition
112
+ jest.advanceTimersByTime(1000);
113
+ expect(getAnimatedStyle(component)).toStrictEqual({ opacity: 1 });
114
+
115
+ // Bg-Color should not change after the transition is done
116
+ jest.advanceTimersByTime(500);
117
+ expect(getAnimatedStyle(component)).toStrictEqual({ opacity: 1 });
118
+ });
119
+
120
+ test("animate-spin", async () => {
121
+ await render(<View testID={testID} className="animate-spin" />);
122
+
123
+ let component = screen.getByTestId(testID);
124
+
125
+ expect(getAnimatedStyle(component)).toStrictEqual({
126
+ transform: [{ rotate: "0deg" }],
127
+ });
128
+ jest.advanceTimersByTime(500);
129
+ expect(getAnimatedStyle(component)).toStrictEqual({
130
+ transform: [{ rotate: "180deg" }],
131
+ });
132
+
133
+ jest.advanceTimersByTime(500);
134
+ expect(getAnimatedStyle(component)).toStrictEqual({
135
+ transform: [{ rotate: "360deg" }],
136
+ });
137
+
138
+ jest.advanceTimersByTime(250);
139
+ expect(getAnimatedStyle(component)).toStrictEqual({
140
+ transform: [{ rotate: "90deg" }],
141
+ });
142
+ });
143
+
144
+ test("animate-pulse", async () => {
145
+ await render(<View testID={testID} className="animate-pulse" />);
146
+
147
+ let component = screen.getByTestId(testID);
148
+
149
+ expect(getAnimatedStyle(component)).toStrictEqual({
150
+ opacity: 1,
151
+ });
152
+ jest.advanceTimersByTime(500);
153
+ expect(getAnimatedStyle(component)).toStrictEqual({
154
+ opacity: 0.7500000093132256,
155
+ });
156
+
157
+ jest.advanceTimersByTime(500);
158
+ expect(getAnimatedStyle(component)).toStrictEqual({
159
+ opacity: 0.5,
160
+ });
161
+
162
+ jest.advanceTimersByTime(500);
163
+ expect(getAnimatedStyle(component)).toStrictEqual({
164
+ opacity: 0.7491666591949523,
165
+ });
166
+
167
+ jest.advanceTimersByTime(501);
168
+ expect(getAnimatedStyle(component)).toStrictEqual({
169
+ opacity: 1,
170
+ });
171
+ });
172
+
173
+ test("changing animations", async () => {
174
+ await render(<View testID={testID} className="animate-spin" />, {
175
+ config: {
176
+ safelist: ["animate-bounce"],
177
+ },
178
+ });
179
+
180
+ let component = screen.getByTestId(testID);
181
+
182
+ expect(getAnimatedStyle(component)).toStrictEqual({
183
+ transform: [{ rotate: "0deg" }],
184
+ });
185
+ jest.advanceTimersByTime(500);
186
+ expect(getAnimatedStyle(component)).toStrictEqual({
187
+ transform: [{ rotate: "180deg" }],
188
+ });
189
+
190
+ screen.rerender(<View testID={testID} className="animate-bounce" />);
191
+
192
+ // It takes 1 tick for reanimated to realize that the SharedValues have changed
193
+ expect(getAnimatedStyle(component)).toStrictEqual({
194
+ transform: [{ rotate: "0deg" }],
195
+ });
196
+
197
+ // Advance to the next tick
198
+ jest.advanceTimersToNextTimer();
199
+
200
+ expect(getAnimatedStyle(component)).toStrictEqual({
201
+ transform: [
202
+ { translateY: "-25%" },
203
+ { perspective: 1 },
204
+ { translateX: 0 },
205
+ { rotate: "0deg" },
206
+ { rotateX: "0deg" },
207
+ { rotateY: "0deg" },
208
+ { rotateZ: "0deg" },
209
+ { scale: 1 },
210
+ { scaleX: 1 },
211
+ { scaleY: 1 },
212
+ { skewX: "0deg" },
213
+ { skewY: "0deg" },
214
+ ],
215
+ });
216
+
217
+ jest.advanceTimersByTime(500);
218
+
219
+ expect(getAnimatedStyle(component)).toStrictEqual({
220
+ transform: [
221
+ { translateY: "0%" },
222
+ { perspective: 1 },
223
+ { translateX: 0 },
224
+ { rotate: "0deg" },
225
+ { rotateX: "0deg" },
226
+ { rotateY: "0deg" },
227
+ { rotateZ: "0deg" },
228
+ { scale: 1 },
229
+ { scaleX: 1 },
230
+ { scaleY: 1 },
231
+ { skewX: "0deg" },
232
+ { skewY: "0deg" },
233
+ ],
234
+ });
235
+
236
+ jest.advanceTimersByTime(501);
237
+
238
+ expect(getAnimatedStyle(component)).toStrictEqual({
239
+ transform: [
240
+ { translateY: "-25%" },
241
+ { perspective: 1 },
242
+ { translateX: 0 },
243
+ { rotate: "0deg" },
244
+ { rotateX: "0deg" },
245
+ { rotateY: "0deg" },
246
+ { rotateZ: "0deg" },
247
+ { scale: 1 },
248
+ { scaleX: 1 },
249
+ { scaleY: 1 },
250
+ { skewX: "0deg" },
251
+ { skewY: "0deg" },
252
+ ],
253
+ });
254
+ });