@cwcss/crosswind 0.1.5 → 0.2.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.
Files changed (87) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +52 -0
  3. package/dist/bin/cli.js +14615 -0
  4. package/dist/build.d.ts +24 -0
  5. package/dist/config.d.ts +5 -0
  6. package/dist/generator.d.ts +31 -0
  7. package/dist/index.d.ts +10 -0
  8. package/dist/parser.d.ts +42 -0
  9. package/dist/plugin.d.ts +22 -0
  10. package/dist/preflight-forms.d.ts +5 -0
  11. package/dist/preflight.d.ts +2 -0
  12. package/dist/rules-advanced.d.ts +27 -0
  13. package/dist/rules-effects.d.ts +25 -0
  14. package/dist/rules-forms.d.ts +7 -0
  15. package/dist/rules-grid.d.ts +13 -0
  16. package/dist/rules-interactivity.d.ts +41 -0
  17. package/dist/rules-layout.d.ts +26 -0
  18. package/dist/rules-transforms.d.ts +33 -0
  19. package/dist/rules-typography.d.ts +41 -0
  20. package/dist/rules.d.ts +39 -0
  21. package/dist/scanner.d.ts +18 -0
  22. package/dist/src/index.js +12848 -0
  23. package/dist/transformer-compile-class.d.ts +37 -0
  24. package/{src/types.ts → dist/types.d.ts} +17 -86
  25. package/package.json +2 -16
  26. package/PLUGIN.md +0 -235
  27. package/benchmark/framework-comparison.bench.ts +0 -850
  28. package/bin/cli.ts +0 -365
  29. package/bin/crosswind +0 -0
  30. package/bin/headwind +0 -0
  31. package/build.ts +0 -8
  32. package/crosswind.config.ts +0 -9
  33. package/example/comprehensive.html +0 -70
  34. package/example/index.html +0 -21
  35. package/example/output.css +0 -236
  36. package/examples/plugin/README.md +0 -112
  37. package/examples/plugin/build.ts +0 -32
  38. package/examples/plugin/src/index.html +0 -34
  39. package/examples/plugin/src/index.ts +0 -7
  40. package/headwind +0 -2
  41. package/src/build.ts +0 -101
  42. package/src/config.ts +0 -529
  43. package/src/generator.ts +0 -2173
  44. package/src/index.ts +0 -10
  45. package/src/parser.ts +0 -1471
  46. package/src/plugin.ts +0 -118
  47. package/src/preflight-forms.ts +0 -229
  48. package/src/preflight.ts +0 -388
  49. package/src/rules-advanced.ts +0 -477
  50. package/src/rules-effects.ts +0 -461
  51. package/src/rules-forms.ts +0 -103
  52. package/src/rules-grid.ts +0 -241
  53. package/src/rules-interactivity.ts +0 -525
  54. package/src/rules-layout.ts +0 -385
  55. package/src/rules-transforms.ts +0 -412
  56. package/src/rules-typography.ts +0 -486
  57. package/src/rules.ts +0 -809
  58. package/src/scanner.ts +0 -84
  59. package/src/transformer-compile-class.ts +0 -275
  60. package/test/advanced-features.test.ts +0 -911
  61. package/test/arbitrary.test.ts +0 -396
  62. package/test/attributify.test.ts +0 -592
  63. package/test/bracket-syntax.test.ts +0 -1133
  64. package/test/build.test.ts +0 -99
  65. package/test/colors.test.ts +0 -934
  66. package/test/flexbox.test.ts +0 -669
  67. package/test/generator.test.ts +0 -597
  68. package/test/grid.test.ts +0 -584
  69. package/test/layout.test.ts +0 -404
  70. package/test/modifiers.test.ts +0 -417
  71. package/test/parser.test.ts +0 -564
  72. package/test/performance-regression.test.ts +0 -376
  73. package/test/performance.test.ts +0 -568
  74. package/test/plugin.test.ts +0 -160
  75. package/test/scanner.test.ts +0 -94
  76. package/test/sizing.test.ts +0 -481
  77. package/test/spacing.test.ts +0 -394
  78. package/test/transformer-compile-class.test.ts +0 -287
  79. package/test/transforms.test.ts +0 -448
  80. package/test/typography.test.ts +0 -632
  81. package/test/variants-form-states.test.ts +0 -225
  82. package/test/variants-group-peer.test.ts +0 -66
  83. package/test/variants-media.test.ts +0 -213
  84. package/test/variants-positional.test.ts +0 -58
  85. package/test/variants-pseudo-elements.test.ts +0 -47
  86. package/test/variants-state.test.ts +0 -62
  87. package/tsconfig.json +0 -18
@@ -1,448 +0,0 @@
1
- import { describe, expect, it } from 'bun:test'
2
- import { defaultConfig } from '../src/config'
3
- import { CSSGenerator } from '../src/generator'
4
- import { parseClass } from '../src/parser'
5
-
6
- describe('Transform Utilities', () => {
7
- describe('Scale', () => {
8
- it('should generate scale-150', () => {
9
- const gen = new CSSGenerator(defaultConfig)
10
- gen.generate('scale-150')
11
- expect(gen.toCSS(false)).toContain('transform: scale(1.5);')
12
- })
13
-
14
- it('should generate scale-0', () => {
15
- const gen = new CSSGenerator(defaultConfig)
16
- gen.generate('scale-0')
17
- expect(gen.toCSS(false)).toContain('transform: scale(0);')
18
- })
19
-
20
- it('should generate scale-x-50', () => {
21
- const gen = new CSSGenerator(defaultConfig)
22
- gen.generate('scale-x-50')
23
- expect(gen.toCSS(false)).toContain('transform: scaleX(0.5);')
24
- })
25
-
26
- it('should generate scale-y-125', () => {
27
- const gen = new CSSGenerator(defaultConfig)
28
- gen.generate('scale-y-125')
29
- expect(gen.toCSS(false)).toContain('transform: scaleY(1.25);')
30
- })
31
-
32
- it('should generate scale-z-150', () => {
33
- const gen = new CSSGenerator(defaultConfig)
34
- gen.generate('scale-z-150')
35
- expect(gen.toCSS(false)).toContain('transform: scaleZ(1.5);')
36
- })
37
- })
38
-
39
- describe('Rotate', () => {
40
- it('should generate rotate-45', () => {
41
- const gen = new CSSGenerator(defaultConfig)
42
- gen.generate('rotate-45')
43
- expect(gen.toCSS(false)).toContain('transform: rotate(45deg);')
44
- })
45
-
46
- it('should generate rotate-90', () => {
47
- const gen = new CSSGenerator(defaultConfig)
48
- gen.generate('rotate-90')
49
- expect(gen.toCSS(false)).toContain('transform: rotate(90deg);')
50
- })
51
-
52
- it('should generate rotate-180', () => {
53
- const gen = new CSSGenerator(defaultConfig)
54
- gen.generate('rotate-180')
55
- expect(gen.toCSS(false)).toContain('transform: rotate(180deg);')
56
- })
57
- })
58
-
59
- describe('3D Rotate', () => {
60
- it('should generate rotate-x-45', () => {
61
- const gen = new CSSGenerator(defaultConfig)
62
- gen.generate('rotate-x-45')
63
- expect(gen.toCSS(false)).toContain('transform: rotateX(45deg);')
64
- })
65
-
66
- it('should generate rotate-y-90', () => {
67
- const gen = new CSSGenerator(defaultConfig)
68
- gen.generate('rotate-y-90')
69
- expect(gen.toCSS(false)).toContain('transform: rotateY(90deg);')
70
- })
71
-
72
- it('should generate rotate-z-180', () => {
73
- const gen = new CSSGenerator(defaultConfig)
74
- gen.generate('rotate-z-180')
75
- expect(gen.toCSS(false)).toContain('transform: rotateZ(180deg);')
76
- })
77
- })
78
-
79
- describe('Translate', () => {
80
- it('should generate translate-x-4', () => {
81
- const gen = new CSSGenerator(defaultConfig)
82
- gen.generate('translate-x-4')
83
- expect(gen.toCSS(false)).toContain('transform: translateX(1rem);')
84
- })
85
-
86
- it('should generate translate-y-8', () => {
87
- const gen = new CSSGenerator(defaultConfig)
88
- gen.generate('translate-y-8')
89
- expect(gen.toCSS(false)).toContain('transform: translateY(2rem);')
90
- })
91
-
92
- it('should parse negative translate-x', () => {
93
- const result = parseClass('-translate-x-4')
94
- expect(result).toEqual({
95
- raw: '-translate-x-4',
96
- variants: [],
97
- utility: 'translate-x',
98
- value: '-4',
99
- important: false,
100
- arbitrary: false,
101
- })
102
- })
103
-
104
- it('should generate negative translate-x CSS', () => {
105
- const gen = new CSSGenerator(defaultConfig)
106
- gen.generate('-translate-x-4')
107
- expect(gen.toCSS(false)).toContain('transform: translateX(-1rem);')
108
- })
109
-
110
- it('should generate translate-z-4', () => {
111
- const gen = new CSSGenerator(defaultConfig)
112
- gen.generate('translate-z-4')
113
- expect(gen.toCSS(false)).toContain('transform: translateZ(1rem);')
114
- })
115
- })
116
-
117
- describe('Skew', () => {
118
- it('should generate skew-x-3', () => {
119
- const gen = new CSSGenerator(defaultConfig)
120
- gen.generate('skew-x-3')
121
- expect(gen.toCSS(false)).toContain('transform: skewX(3deg);')
122
- })
123
-
124
- it('should generate skew-y-6', () => {
125
- const gen = new CSSGenerator(defaultConfig)
126
- gen.generate('skew-y-6')
127
- expect(gen.toCSS(false)).toContain('transform: skewY(6deg);')
128
- })
129
- })
130
-
131
- describe('Transform properties', () => {
132
- it('should generate backface-hidden', () => {
133
- const gen = new CSSGenerator(defaultConfig)
134
- gen.generate('backface-hidden')
135
- expect(gen.toCSS(false)).toContain('backface-visibility: hidden;')
136
- })
137
-
138
- it('should generate transform-3d', () => {
139
- const gen = new CSSGenerator(defaultConfig)
140
- gen.generate('transform-3d')
141
- expect(gen.toCSS(false)).toContain('transform-style: preserve-3d;')
142
- })
143
-
144
- it('should generate perspective-origin-center', () => {
145
- const gen = new CSSGenerator(defaultConfig)
146
- gen.generate('perspective-origin-center')
147
- expect(gen.toCSS(false)).toContain('perspective-origin: center;')
148
- })
149
- })
150
-
151
- describe('Edge Cases', () => {
152
- describe('Arbitrary transform values', () => {
153
- it('should handle arbitrary scale', () => {
154
- const gen = new CSSGenerator(defaultConfig)
155
- gen.generate('scale-[1.15]')
156
- expect(gen.toCSS(false)).toContain('transform: scale(1.15);')
157
- })
158
-
159
- it('should handle arbitrary rotate', () => {
160
- const gen = new CSSGenerator(defaultConfig)
161
- gen.generate('rotate-[17deg]')
162
- expect(gen.toCSS(false)).toContain('transform: rotate(17deg);')
163
- })
164
-
165
- it('should handle arbitrary translate', () => {
166
- const gen = new CSSGenerator(defaultConfig)
167
- gen.generate('translate-x-[45px]')
168
- expect(gen.toCSS(false)).toContain('transform: translateX(45px);')
169
- })
170
-
171
- it('should handle arbitrary skew', () => {
172
- const gen = new CSSGenerator(defaultConfig)
173
- gen.generate('skew-x-[15deg]')
174
- expect(gen.toCSS(false)).toContain('transform: skewX(15deg);')
175
- })
176
- })
177
-
178
- describe('Transform origin', () => {
179
- it('should handle origin-center', () => {
180
- const gen = new CSSGenerator(defaultConfig)
181
- gen.generate('origin-center')
182
- expect(gen.toCSS(false)).toContain('transform-origin: center;')
183
- })
184
-
185
- it('should handle origin-top', () => {
186
- const gen = new CSSGenerator(defaultConfig)
187
- gen.generate('origin-top')
188
- expect(gen.toCSS(false)).toContain('transform-origin: top;')
189
- })
190
-
191
- it('should handle origin-top-right', () => {
192
- const gen = new CSSGenerator(defaultConfig)
193
- gen.generate('origin-top-right')
194
- expect(gen.toCSS(false)).toContain('transform-origin: top right;')
195
- })
196
-
197
- it('should handle origin-right', () => {
198
- const gen = new CSSGenerator(defaultConfig)
199
- gen.generate('origin-right')
200
- expect(gen.toCSS(false)).toContain('transform-origin: right;')
201
- })
202
-
203
- it('should handle origin-bottom-right', () => {
204
- const gen = new CSSGenerator(defaultConfig)
205
- gen.generate('origin-bottom-right')
206
- expect(gen.toCSS(false)).toContain('transform-origin: bottom right;')
207
- })
208
-
209
- it('should handle origin-bottom', () => {
210
- const gen = new CSSGenerator(defaultConfig)
211
- gen.generate('origin-bottom')
212
- expect(gen.toCSS(false)).toContain('transform-origin: bottom;')
213
- })
214
-
215
- it('should handle origin-bottom-left', () => {
216
- const gen = new CSSGenerator(defaultConfig)
217
- gen.generate('origin-bottom-left')
218
- expect(gen.toCSS(false)).toContain('transform-origin: bottom left;')
219
- })
220
-
221
- it('should handle origin-left', () => {
222
- const gen = new CSSGenerator(defaultConfig)
223
- gen.generate('origin-left')
224
- expect(gen.toCSS(false)).toContain('transform-origin: left;')
225
- })
226
-
227
- it('should handle origin-top-left', () => {
228
- const gen = new CSSGenerator(defaultConfig)
229
- gen.generate('origin-top-left')
230
- expect(gen.toCSS(false)).toContain('transform-origin: top left;')
231
- })
232
-
233
- it('should handle arbitrary origin', () => {
234
- const gen = new CSSGenerator(defaultConfig)
235
- gen.generate('origin-[25%_75%]')
236
- expect(gen.toCSS(false)).toContain('transform-origin: 25% 75%;')
237
- })
238
- })
239
-
240
- describe('Perspective', () => {
241
- it('should handle perspective-500', () => {
242
- const gen = new CSSGenerator(defaultConfig)
243
- gen.generate('perspective-500')
244
- expect(gen.toCSS(false)).toContain('perspective: 500px;')
245
- })
246
-
247
- it('should handle perspective-1000', () => {
248
- const gen = new CSSGenerator(defaultConfig)
249
- gen.generate('perspective-1000')
250
- expect(gen.toCSS(false)).toContain('perspective: 1000px;')
251
- })
252
-
253
- it('should handle perspective-none', () => {
254
- const gen = new CSSGenerator(defaultConfig)
255
- gen.generate('perspective-none')
256
- expect(gen.toCSS(false)).toContain('perspective: none;')
257
- })
258
-
259
- it('should handle arbitrary perspective', () => {
260
- const gen = new CSSGenerator(defaultConfig)
261
- gen.generate('perspective-[750px]')
262
- expect(gen.toCSS(false)).toContain('perspective: 750px;')
263
- })
264
-
265
- it('should handle perspective-origin-top', () => {
266
- const gen = new CSSGenerator(defaultConfig)
267
- gen.generate('perspective-origin-top')
268
- expect(gen.toCSS(false)).toContain('perspective-origin: top;')
269
- })
270
-
271
- it('should handle perspective-origin-bottom', () => {
272
- const gen = new CSSGenerator(defaultConfig)
273
- gen.generate('perspective-origin-bottom')
274
- expect(gen.toCSS(false)).toContain('perspective-origin: bottom;')
275
- })
276
-
277
- it('should handle perspective-origin-left', () => {
278
- const gen = new CSSGenerator(defaultConfig)
279
- gen.generate('perspective-origin-left')
280
- expect(gen.toCSS(false)).toContain('perspective-origin: left;')
281
- })
282
-
283
- it('should handle perspective-origin-right', () => {
284
- const gen = new CSSGenerator(defaultConfig)
285
- gen.generate('perspective-origin-right')
286
- expect(gen.toCSS(false)).toContain('perspective-origin: right;')
287
- })
288
- })
289
-
290
- describe('Negative transforms', () => {
291
- it('should handle negative scale', () => {
292
- const gen = new CSSGenerator(defaultConfig)
293
- gen.generate('-scale-x-100')
294
- expect(gen.toCSS(false)).toContain('transform: scaleX(-1);')
295
- })
296
-
297
- it('should handle negative rotate', () => {
298
- const gen = new CSSGenerator(defaultConfig)
299
- gen.generate('-rotate-45')
300
- expect(gen.toCSS(false)).toContain('transform: rotate(-45deg);')
301
- })
302
-
303
- it('should handle negative translate-y', () => {
304
- const gen = new CSSGenerator(defaultConfig)
305
- gen.generate('-translate-y-4')
306
- expect(gen.toCSS(false)).toContain('transform: translateY(-1rem);')
307
- })
308
-
309
- it('should handle negative skew', () => {
310
- const gen = new CSSGenerator(defaultConfig)
311
- gen.generate('-skew-x-3')
312
- expect(gen.toCSS(false)).toContain('transform: skewX(-3deg);')
313
- })
314
- })
315
-
316
- describe('Transform GPU', () => {
317
- it('should handle transform-gpu', () => {
318
- const gen = new CSSGenerator(defaultConfig)
319
- gen.generate('transform-gpu')
320
- const css = gen.toCSS(false)
321
- expect(css).toContain('transform:')
322
- expect(css).toContain('translate3d')
323
- })
324
-
325
- it('should handle transform-none', () => {
326
- const gen = new CSSGenerator(defaultConfig)
327
- gen.generate('transform-none')
328
- expect(gen.toCSS(false)).toContain('transform: none;')
329
- })
330
- })
331
-
332
- describe('Backface visibility', () => {
333
- it('should handle backface-visible', () => {
334
- const gen = new CSSGenerator(defaultConfig)
335
- gen.generate('backface-visible')
336
- expect(gen.toCSS(false)).toContain('backface-visibility: visible;')
337
- })
338
- })
339
-
340
- describe('Transform style', () => {
341
- it('should handle transform-flat', () => {
342
- const gen = new CSSGenerator(defaultConfig)
343
- gen.generate('transform-flat')
344
- expect(gen.toCSS(false)).toContain('transform-style: flat;')
345
- })
346
- })
347
-
348
- describe('Transforms with variants', () => {
349
- it('should handle scale with responsive variant', () => {
350
- const gen = new CSSGenerator(defaultConfig)
351
- gen.generate('md:scale-110')
352
- const css = gen.toCSS(false)
353
- expect(css).toContain('@media (min-width: 768px)')
354
- expect(css).toContain('transform: scale(1.1);')
355
- })
356
-
357
- it('should handle rotate with hover variant', () => {
358
- const gen = new CSSGenerator(defaultConfig)
359
- gen.generate('hover:rotate-90')
360
- const css = gen.toCSS(false)
361
- expect(css).toContain(':hover')
362
- expect(css).toContain('transform: rotate(90deg);')
363
- })
364
-
365
- it('should handle translate with dark mode variant', () => {
366
- const gen = new CSSGenerator(defaultConfig)
367
- gen.generate('dark:translate-x-4')
368
- const css = gen.toCSS(false)
369
- expect(css).toContain('.dark')
370
- expect(css).toContain('transform: translateX(1rem);')
371
- })
372
- })
373
-
374
- describe('Extreme and edge values', () => {
375
- it('should handle scale-0', () => {
376
- const gen = new CSSGenerator(defaultConfig)
377
- gen.generate('scale-0')
378
- expect(gen.toCSS(false)).toContain('transform: scale(0);')
379
- })
380
-
381
- it('should handle rotate-0', () => {
382
- const gen = new CSSGenerator(defaultConfig)
383
- gen.generate('rotate-0')
384
- expect(gen.toCSS(false)).toContain('transform: rotate(0deg);')
385
- })
386
-
387
- it('should handle very large rotate', () => {
388
- const gen = new CSSGenerator(defaultConfig)
389
- gen.generate('rotate-[720deg]')
390
- expect(gen.toCSS(false)).toContain('transform: rotate(720deg);')
391
- })
392
-
393
- it('should handle fractional rotate', () => {
394
- const gen = new CSSGenerator(defaultConfig)
395
- gen.generate('rotate-[0.5deg]')
396
- expect(gen.toCSS(false)).toContain('transform: rotate(0.5deg);')
397
- })
398
- })
399
-
400
- describe('Transform with CSS variables', () => {
401
- it('should handle scale with CSS variable', () => {
402
- const gen = new CSSGenerator(defaultConfig)
403
- gen.generate('scale-[var(--scale)]')
404
- expect(gen.toCSS(false)).toContain('transform: scale(var(--scale));')
405
- })
406
-
407
- it('should handle rotate with CSS variable', () => {
408
- const gen = new CSSGenerator(defaultConfig)
409
- gen.generate('rotate-[var(--rotation)]')
410
- expect(gen.toCSS(false)).toContain('transform: rotate(var(--rotation));')
411
- })
412
-
413
- it('should handle translate with calc', () => {
414
- const gen = new CSSGenerator(defaultConfig)
415
- gen.generate('translate-x-[calc(100%+1rem)]')
416
- expect(gen.toCSS(false)).toContain('transform: translateX(calc(100%+1rem));')
417
- })
418
- })
419
-
420
- describe('Translate with percentage', () => {
421
- it('should handle translate-x-1/2', () => {
422
- const gen = new CSSGenerator(defaultConfig)
423
- gen.generate('translate-x-1/2')
424
- expect(gen.toCSS(false)).toContain('transform: translateX(50%);')
425
- })
426
-
427
- it('should handle translate-y-1/3', () => {
428
- const gen = new CSSGenerator(defaultConfig)
429
- gen.generate('translate-y-1/3')
430
- const css = gen.toCSS(false)
431
- expect(css).toContain('transform: translateY(33.')
432
- expect(css).toContain('%);')
433
- })
434
-
435
- it('should handle translate-y-full', () => {
436
- const gen = new CSSGenerator(defaultConfig)
437
- gen.generate('translate-y-full')
438
- expect(gen.toCSS(false)).toContain('transform: translateY(100%);')
439
- })
440
-
441
- it('should handle negative translate with fraction', () => {
442
- const gen = new CSSGenerator(defaultConfig)
443
- gen.generate('-translate-x-1/2')
444
- expect(gen.toCSS(false)).toContain('transform: translateX(-50%);')
445
- })
446
- })
447
- })
448
- })