@cwcss/crosswind 0.1.4 → 0.1.6

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 (86) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +390 -0
  3. package/dist/build.d.ts +24 -0
  4. package/dist/config.d.ts +5 -0
  5. package/dist/generator.d.ts +31 -0
  6. package/dist/index.d.ts +10 -0
  7. package/dist/index.js +12798 -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/transformer-compile-class.d.ts +37 -0
  23. package/{src/types.ts → dist/types.d.ts} +17 -86
  24. package/package.json +1 -1
  25. package/PLUGIN.md +0 -235
  26. package/benchmark/framework-comparison.bench.ts +0 -850
  27. package/bin/cli.ts +0 -365
  28. package/bin/crosswind +0 -0
  29. package/bin/headwind +0 -0
  30. package/build.ts +0 -8
  31. package/crosswind.config.ts +0 -9
  32. package/example/comprehensive.html +0 -70
  33. package/example/index.html +0 -21
  34. package/example/output.css +0 -236
  35. package/examples/plugin/README.md +0 -112
  36. package/examples/plugin/build.ts +0 -32
  37. package/examples/plugin/src/index.html +0 -34
  38. package/examples/plugin/src/index.ts +0 -7
  39. package/headwind +0 -2
  40. package/src/build.ts +0 -101
  41. package/src/config.ts +0 -529
  42. package/src/generator.ts +0 -2173
  43. package/src/index.ts +0 -10
  44. package/src/parser.ts +0 -1471
  45. package/src/plugin.ts +0 -118
  46. package/src/preflight-forms.ts +0 -229
  47. package/src/preflight.ts +0 -388
  48. package/src/rules-advanced.ts +0 -477
  49. package/src/rules-effects.ts +0 -457
  50. package/src/rules-forms.ts +0 -103
  51. package/src/rules-grid.ts +0 -241
  52. package/src/rules-interactivity.ts +0 -525
  53. package/src/rules-layout.ts +0 -385
  54. package/src/rules-transforms.ts +0 -412
  55. package/src/rules-typography.ts +0 -486
  56. package/src/rules.ts +0 -805
  57. package/src/scanner.ts +0 -84
  58. package/src/transformer-compile-class.ts +0 -275
  59. package/test/advanced-features.test.ts +0 -911
  60. package/test/arbitrary.test.ts +0 -396
  61. package/test/attributify.test.ts +0 -592
  62. package/test/bracket-syntax.test.ts +0 -1133
  63. package/test/build.test.ts +0 -99
  64. package/test/colors.test.ts +0 -934
  65. package/test/flexbox.test.ts +0 -669
  66. package/test/generator.test.ts +0 -597
  67. package/test/grid.test.ts +0 -584
  68. package/test/layout.test.ts +0 -404
  69. package/test/modifiers.test.ts +0 -417
  70. package/test/parser.test.ts +0 -564
  71. package/test/performance-regression.test.ts +0 -376
  72. package/test/performance.test.ts +0 -568
  73. package/test/plugin.test.ts +0 -160
  74. package/test/scanner.test.ts +0 -94
  75. package/test/sizing.test.ts +0 -481
  76. package/test/spacing.test.ts +0 -394
  77. package/test/transformer-compile-class.test.ts +0 -287
  78. package/test/transforms.test.ts +0 -448
  79. package/test/typography.test.ts +0 -632
  80. package/test/variants-form-states.test.ts +0 -225
  81. package/test/variants-group-peer.test.ts +0 -66
  82. package/test/variants-media.test.ts +0 -213
  83. package/test/variants-positional.test.ts +0 -58
  84. package/test/variants-pseudo-elements.test.ts +0 -47
  85. package/test/variants-state.test.ts +0 -62
  86. 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
- })