@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.
- package/LICENSE.md +21 -0
- package/README.md +52 -0
- package/dist/bin/cli.js +14615 -0
- package/dist/build.d.ts +24 -0
- package/dist/config.d.ts +5 -0
- package/dist/generator.d.ts +31 -0
- package/dist/index.d.ts +10 -0
- package/dist/parser.d.ts +42 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/preflight-forms.d.ts +5 -0
- package/dist/preflight.d.ts +2 -0
- package/dist/rules-advanced.d.ts +27 -0
- package/dist/rules-effects.d.ts +25 -0
- package/dist/rules-forms.d.ts +7 -0
- package/dist/rules-grid.d.ts +13 -0
- package/dist/rules-interactivity.d.ts +41 -0
- package/dist/rules-layout.d.ts +26 -0
- package/dist/rules-transforms.d.ts +33 -0
- package/dist/rules-typography.d.ts +41 -0
- package/dist/rules.d.ts +39 -0
- package/dist/scanner.d.ts +18 -0
- package/dist/src/index.js +12848 -0
- package/dist/transformer-compile-class.d.ts +37 -0
- package/{src/types.ts → dist/types.d.ts} +17 -86
- package/package.json +2 -16
- package/PLUGIN.md +0 -235
- package/benchmark/framework-comparison.bench.ts +0 -850
- package/bin/cli.ts +0 -365
- package/bin/crosswind +0 -0
- package/bin/headwind +0 -0
- package/build.ts +0 -8
- package/crosswind.config.ts +0 -9
- package/example/comprehensive.html +0 -70
- package/example/index.html +0 -21
- package/example/output.css +0 -236
- package/examples/plugin/README.md +0 -112
- package/examples/plugin/build.ts +0 -32
- package/examples/plugin/src/index.html +0 -34
- package/examples/plugin/src/index.ts +0 -7
- package/headwind +0 -2
- package/src/build.ts +0 -101
- package/src/config.ts +0 -529
- package/src/generator.ts +0 -2173
- package/src/index.ts +0 -10
- package/src/parser.ts +0 -1471
- package/src/plugin.ts +0 -118
- package/src/preflight-forms.ts +0 -229
- package/src/preflight.ts +0 -388
- package/src/rules-advanced.ts +0 -477
- package/src/rules-effects.ts +0 -461
- package/src/rules-forms.ts +0 -103
- package/src/rules-grid.ts +0 -241
- package/src/rules-interactivity.ts +0 -525
- package/src/rules-layout.ts +0 -385
- package/src/rules-transforms.ts +0 -412
- package/src/rules-typography.ts +0 -486
- package/src/rules.ts +0 -809
- package/src/scanner.ts +0 -84
- package/src/transformer-compile-class.ts +0 -275
- package/test/advanced-features.test.ts +0 -911
- package/test/arbitrary.test.ts +0 -396
- package/test/attributify.test.ts +0 -592
- package/test/bracket-syntax.test.ts +0 -1133
- package/test/build.test.ts +0 -99
- package/test/colors.test.ts +0 -934
- package/test/flexbox.test.ts +0 -669
- package/test/generator.test.ts +0 -597
- package/test/grid.test.ts +0 -584
- package/test/layout.test.ts +0 -404
- package/test/modifiers.test.ts +0 -417
- package/test/parser.test.ts +0 -564
- package/test/performance-regression.test.ts +0 -376
- package/test/performance.test.ts +0 -568
- package/test/plugin.test.ts +0 -160
- package/test/scanner.test.ts +0 -94
- package/test/sizing.test.ts +0 -481
- package/test/spacing.test.ts +0 -394
- package/test/transformer-compile-class.test.ts +0 -287
- package/test/transforms.test.ts +0 -448
- package/test/typography.test.ts +0 -632
- package/test/variants-form-states.test.ts +0 -225
- package/test/variants-group-peer.test.ts +0 -66
- package/test/variants-media.test.ts +0 -213
- package/test/variants-positional.test.ts +0 -58
- package/test/variants-pseudo-elements.test.ts +0 -47
- package/test/variants-state.test.ts +0 -62
- package/tsconfig.json +0 -18
package/src/rules-transforms.ts
DELETED
|
@@ -1,412 +0,0 @@
|
|
|
1
|
-
import type { UtilityRule } from './rules'
|
|
2
|
-
|
|
3
|
-
// Transform, Transition, Animation utilities
|
|
4
|
-
|
|
5
|
-
export const transformRule: UtilityRule = (parsed) => {
|
|
6
|
-
const values: Record<string, string> = {
|
|
7
|
-
'transform': 'translate(var(--hw-translate-x), var(--hw-translate-y)) rotate(var(--hw-rotate)) skewX(var(--hw-skew-x)) skewY(var(--hw-skew-y)) scaleX(var(--hw-scale-x)) scaleY(var(--hw-scale-y))',
|
|
8
|
-
'transform-cpu': 'translate(var(--hw-translate-x), var(--hw-translate-y)) rotate(var(--hw-rotate)) skewX(var(--hw-skew-x)) skewY(var(--hw-skew-y)) scaleX(var(--hw-scale-x)) scaleY(var(--hw-scale-y))',
|
|
9
|
-
'transform-gpu': 'translate3d(var(--hw-translate-x), var(--hw-translate-y), 0) rotate(var(--hw-rotate)) skewX(var(--hw-skew-x)) skewY(var(--hw-skew-y)) scaleX(var(--hw-scale-x)) scaleY(var(--hw-scale-y))',
|
|
10
|
-
'transform-none': 'none',
|
|
11
|
-
}
|
|
12
|
-
return values[parsed.raw] ? { transform: values[parsed.raw] } : undefined
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const scaleRule: UtilityRule = (parsed) => {
|
|
16
|
-
if (parsed.utility === 'scale') {
|
|
17
|
-
if (!parsed.value)
|
|
18
|
-
return { transform: 'scale(1)' }
|
|
19
|
-
// If arbitrary, use value as-is
|
|
20
|
-
if (parsed.arbitrary) {
|
|
21
|
-
return { transform: `scale(${parsed.value})` }
|
|
22
|
-
}
|
|
23
|
-
const scale = Number(parsed.value) / 100
|
|
24
|
-
return { transform: `scale(${scale})` }
|
|
25
|
-
}
|
|
26
|
-
if (parsed.utility === 'scale-x') {
|
|
27
|
-
if (!parsed.value)
|
|
28
|
-
return { transform: 'scaleX(1)' }
|
|
29
|
-
if (parsed.arbitrary) {
|
|
30
|
-
return { transform: `scaleX(${parsed.value})` }
|
|
31
|
-
}
|
|
32
|
-
const scale = Number(parsed.value) / 100
|
|
33
|
-
return { transform: `scaleX(${scale})` }
|
|
34
|
-
}
|
|
35
|
-
if (parsed.utility === 'scale-y') {
|
|
36
|
-
if (!parsed.value)
|
|
37
|
-
return { transform: 'scaleY(1)' }
|
|
38
|
-
if (parsed.arbitrary) {
|
|
39
|
-
return { transform: `scaleY(${parsed.value})` }
|
|
40
|
-
}
|
|
41
|
-
const scale = Number(parsed.value) / 100
|
|
42
|
-
return { transform: `scaleY(${scale})` }
|
|
43
|
-
}
|
|
44
|
-
if (parsed.utility === 'scale-z') {
|
|
45
|
-
if (!parsed.value)
|
|
46
|
-
return { transform: 'scaleZ(1)' }
|
|
47
|
-
if (parsed.arbitrary) {
|
|
48
|
-
return { transform: `scaleZ(${parsed.value})` }
|
|
49
|
-
}
|
|
50
|
-
const scale = Number(parsed.value) / 100
|
|
51
|
-
return { transform: `scaleZ(${scale})` }
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export const rotateRule: UtilityRule = (parsed) => {
|
|
56
|
-
if (parsed.utility === 'rotate' && parsed.value) {
|
|
57
|
-
// If arbitrary or already has unit, use as-is, otherwise add deg
|
|
58
|
-
const value = parsed.arbitrary || parsed.value.includes('deg') || parsed.value.includes('rad') || parsed.value.includes('turn')
|
|
59
|
-
? parsed.value
|
|
60
|
-
: `${parsed.value}deg`
|
|
61
|
-
return { transform: `rotate(${value})` }
|
|
62
|
-
}
|
|
63
|
-
if (parsed.utility === 'rotate-x' && parsed.value) {
|
|
64
|
-
const value = parsed.arbitrary || parsed.value.includes('deg') || parsed.value.includes('rad') || parsed.value.includes('turn')
|
|
65
|
-
? parsed.value
|
|
66
|
-
: `${parsed.value}deg`
|
|
67
|
-
return { transform: `rotateX(${value})` }
|
|
68
|
-
}
|
|
69
|
-
if (parsed.utility === 'rotate-y' && parsed.value) {
|
|
70
|
-
const value = parsed.arbitrary || parsed.value.includes('deg') || parsed.value.includes('rad') || parsed.value.includes('turn')
|
|
71
|
-
? parsed.value
|
|
72
|
-
: `${parsed.value}deg`
|
|
73
|
-
return { transform: `rotateY(${value})` }
|
|
74
|
-
}
|
|
75
|
-
if (parsed.utility === 'rotate-z' && parsed.value) {
|
|
76
|
-
const value = parsed.arbitrary || parsed.value.includes('deg') || parsed.value.includes('rad') || parsed.value.includes('turn')
|
|
77
|
-
? parsed.value
|
|
78
|
-
: `${parsed.value}deg`
|
|
79
|
-
return { transform: `rotateZ(${value})` }
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export const translateRule: UtilityRule = (parsed, config) => {
|
|
84
|
-
const getTranslateValue = (val: string): string => {
|
|
85
|
-
// Handle fractions: 1/2 -> 50%, 1/3 -> 33.333333%, etc.
|
|
86
|
-
if (val.includes('/')) {
|
|
87
|
-
const [num, denom] = val.split('/')
|
|
88
|
-
const percentage = (Number(num) / Number(denom)) * 100
|
|
89
|
-
return `${percentage}%`
|
|
90
|
-
}
|
|
91
|
-
// Handle special keywords
|
|
92
|
-
if (val === 'full')
|
|
93
|
-
return '100%'
|
|
94
|
-
if (val === 'half')
|
|
95
|
-
return '50%'
|
|
96
|
-
// Check spacing config
|
|
97
|
-
return config.theme.spacing[val] || val
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (parsed.utility === 'translate-x' && parsed.value) {
|
|
101
|
-
let value: string
|
|
102
|
-
if (parsed.value.startsWith('-')) {
|
|
103
|
-
const positiveValue = parsed.value.slice(1)
|
|
104
|
-
value = `-${getTranslateValue(positiveValue)}`
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
value = getTranslateValue(parsed.value)
|
|
108
|
-
}
|
|
109
|
-
return { transform: `translateX(${value})` }
|
|
110
|
-
}
|
|
111
|
-
if (parsed.utility === 'translate-y' && parsed.value) {
|
|
112
|
-
let value: string
|
|
113
|
-
if (parsed.value.startsWith('-')) {
|
|
114
|
-
const positiveValue = parsed.value.slice(1)
|
|
115
|
-
value = `-${getTranslateValue(positiveValue)}`
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
value = getTranslateValue(parsed.value)
|
|
119
|
-
}
|
|
120
|
-
return { transform: `translateY(${value})` }
|
|
121
|
-
}
|
|
122
|
-
if (parsed.utility === 'translate-z' && parsed.value) {
|
|
123
|
-
let value: string
|
|
124
|
-
if (parsed.value.startsWith('-')) {
|
|
125
|
-
const positiveValue = parsed.value.slice(1)
|
|
126
|
-
value = `-${getTranslateValue(positiveValue)}`
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
value = getTranslateValue(parsed.value)
|
|
130
|
-
}
|
|
131
|
-
return { transform: `translateZ(${value})` }
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export const skewRule: UtilityRule = (parsed) => {
|
|
136
|
-
if (parsed.utility === 'skew-x' && parsed.value) {
|
|
137
|
-
const value = parsed.arbitrary || parsed.value.includes('deg') || parsed.value.includes('rad') || parsed.value.includes('turn')
|
|
138
|
-
? parsed.value
|
|
139
|
-
: `${parsed.value}deg`
|
|
140
|
-
return { transform: `skewX(${value})` }
|
|
141
|
-
}
|
|
142
|
-
if (parsed.utility === 'skew-y' && parsed.value) {
|
|
143
|
-
const value = parsed.arbitrary || parsed.value.includes('deg') || parsed.value.includes('rad') || parsed.value.includes('turn')
|
|
144
|
-
? parsed.value
|
|
145
|
-
: `${parsed.value}deg`
|
|
146
|
-
return { transform: `skewY(${value})` }
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export const transformOriginRule: UtilityRule = (parsed) => {
|
|
151
|
-
if (parsed.utility === 'origin' && parsed.value) {
|
|
152
|
-
// Handle arbitrary values with underscores as spaces
|
|
153
|
-
if (parsed.arbitrary) {
|
|
154
|
-
return { 'transform-origin': parsed.value.replace(/_/g, ' ') }
|
|
155
|
-
}
|
|
156
|
-
// Handle predefined values
|
|
157
|
-
const origins: Record<string, string> = {
|
|
158
|
-
'center': 'center',
|
|
159
|
-
'top': 'top',
|
|
160
|
-
'top-right': 'top right',
|
|
161
|
-
'right': 'right',
|
|
162
|
-
'bottom-right': 'bottom right',
|
|
163
|
-
'bottom': 'bottom',
|
|
164
|
-
'bottom-left': 'bottom left',
|
|
165
|
-
'left': 'left',
|
|
166
|
-
'top-left': 'top left',
|
|
167
|
-
}
|
|
168
|
-
return origins[parsed.value] ? { 'transform-origin': origins[parsed.value] } : undefined
|
|
169
|
-
}
|
|
170
|
-
return undefined
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export const perspectiveRule: UtilityRule = (parsed) => {
|
|
174
|
-
if (parsed.utility === 'perspective' && parsed.value) {
|
|
175
|
-
// If value is 'none', use as-is
|
|
176
|
-
if (parsed.value === 'none') {
|
|
177
|
-
return { perspective: 'none' }
|
|
178
|
-
}
|
|
179
|
-
// If arbitrary or already has unit, use as-is
|
|
180
|
-
if (parsed.arbitrary || parsed.value.includes('px') || parsed.value.includes('rem') || parsed.value.includes('em')) {
|
|
181
|
-
return { perspective: parsed.value }
|
|
182
|
-
}
|
|
183
|
-
// Otherwise add px
|
|
184
|
-
return { perspective: `${parsed.value}px` }
|
|
185
|
-
}
|
|
186
|
-
return undefined
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export const perspectiveOriginRule: UtilityRule = (parsed) => {
|
|
190
|
-
if (parsed.utility === 'perspective-origin' && parsed.value) {
|
|
191
|
-
const origins: Record<string, string> = {
|
|
192
|
-
'center': 'center',
|
|
193
|
-
'top': 'top',
|
|
194
|
-
'top-right': 'top right',
|
|
195
|
-
'right': 'right',
|
|
196
|
-
'bottom-right': 'bottom right',
|
|
197
|
-
'bottom': 'bottom',
|
|
198
|
-
'bottom-left': 'bottom left',
|
|
199
|
-
'left': 'left',
|
|
200
|
-
'top-left': 'top left',
|
|
201
|
-
}
|
|
202
|
-
return { 'perspective-origin': origins[parsed.value] || parsed.value }
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
export const backfaceVisibilityRule: UtilityRule = (parsed) => {
|
|
207
|
-
const values: Record<string, string> = {
|
|
208
|
-
'backface-visible': 'visible',
|
|
209
|
-
'backface-hidden': 'hidden',
|
|
210
|
-
}
|
|
211
|
-
return values[parsed.raw] ? { 'backface-visibility': values[parsed.raw] } : undefined
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
export const transformStyleRule: UtilityRule = (parsed) => {
|
|
215
|
-
const values: Record<string, string> = {
|
|
216
|
-
'transform-flat': 'flat',
|
|
217
|
-
'transform-3d': 'preserve-3d',
|
|
218
|
-
}
|
|
219
|
-
return values[parsed.raw] ? { 'transform-style': values[parsed.raw] } : undefined
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Transition utilities
|
|
223
|
-
export const transitionPropertyRule: UtilityRule = (parsed) => {
|
|
224
|
-
const properties: Record<string, string> = {
|
|
225
|
-
'transition-none': 'none',
|
|
226
|
-
'transition-all': 'all',
|
|
227
|
-
'transition': 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',
|
|
228
|
-
'transition-colors': 'color, background-color, border-color, text-decoration-color, fill, stroke',
|
|
229
|
-
'transition-opacity': 'opacity',
|
|
230
|
-
'transition-shadow': 'box-shadow',
|
|
231
|
-
'transition-transform': 'transform',
|
|
232
|
-
}
|
|
233
|
-
return properties[parsed.raw] ? { 'transition-property': properties[parsed.raw] } : undefined
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export const transitionDurationRule: UtilityRule = (parsed) => {
|
|
237
|
-
if (parsed.utility === 'duration' && parsed.value) {
|
|
238
|
-
// Named duration presets (like Tailwind)
|
|
239
|
-
const durations: Record<string, string> = {
|
|
240
|
-
'0': '0s',
|
|
241
|
-
'75': '75ms',
|
|
242
|
-
'100': '100ms',
|
|
243
|
-
'150': '150ms',
|
|
244
|
-
'200': '200ms',
|
|
245
|
-
'300': '300ms',
|
|
246
|
-
'500': '500ms',
|
|
247
|
-
'700': '700ms',
|
|
248
|
-
'1000': '1000ms',
|
|
249
|
-
}
|
|
250
|
-
return { 'transition-duration': durations[parsed.value] || `${parsed.value}ms` }
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export const transitionTimingRule: UtilityRule = (parsed) => {
|
|
255
|
-
const timings: Record<string, string> = {
|
|
256
|
-
'ease-linear': 'linear',
|
|
257
|
-
'ease-in': 'cubic-bezier(0.4, 0, 1, 1)',
|
|
258
|
-
'ease-out': 'cubic-bezier(0, 0, 0.2, 1)',
|
|
259
|
-
'ease-in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
260
|
-
}
|
|
261
|
-
return timings[parsed.raw] ? { 'transition-timing-function': timings[parsed.raw] } : undefined
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
export const transitionDelayRule: UtilityRule = (parsed) => {
|
|
265
|
-
if (parsed.utility === 'delay' && parsed.value) {
|
|
266
|
-
// Named delay presets (like Tailwind)
|
|
267
|
-
const delays: Record<string, string> = {
|
|
268
|
-
'0': '0s',
|
|
269
|
-
'75': '75ms',
|
|
270
|
-
'100': '100ms',
|
|
271
|
-
'150': '150ms',
|
|
272
|
-
'200': '200ms',
|
|
273
|
-
'300': '300ms',
|
|
274
|
-
'500': '500ms',
|
|
275
|
-
'700': '700ms',
|
|
276
|
-
'1000': '1000ms',
|
|
277
|
-
}
|
|
278
|
-
return { 'transition-delay': delays[parsed.value] || `${parsed.value}ms` }
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
export const transitionBehaviorRule: UtilityRule = (parsed) => {
|
|
283
|
-
const values: Record<string, string> = {
|
|
284
|
-
'transition-behavior-normal': 'normal',
|
|
285
|
-
'transition-behavior-allow-discrete': 'allow-discrete',
|
|
286
|
-
}
|
|
287
|
-
return values[parsed.raw] ? { 'transition-behavior': values[parsed.raw] } : undefined
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
export const animationRule: UtilityRule = (parsed) => {
|
|
291
|
-
if (parsed.utility !== 'animate') {
|
|
292
|
-
return undefined
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
const animations: Record<string, string> = {
|
|
296
|
-
none: 'none',
|
|
297
|
-
spin: 'spin 1s linear infinite',
|
|
298
|
-
ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
|
|
299
|
-
pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
|
300
|
-
bounce: 'bounce 1s infinite',
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Support arbitrary animation values
|
|
304
|
-
if (parsed.arbitrary && parsed.value) {
|
|
305
|
-
// Replace underscores with spaces for arbitrary animation values
|
|
306
|
-
return { animation: parsed.value.replace(/_/g, ' ') }
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// Support predefined animations
|
|
310
|
-
if (parsed.value && animations[parsed.value]) {
|
|
311
|
-
return { animation: animations[parsed.value] }
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return undefined
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Animation play state
|
|
318
|
-
export const animationPlayStateRule: UtilityRule = (parsed) => {
|
|
319
|
-
const values: Record<string, string> = {
|
|
320
|
-
'animate-running': 'running',
|
|
321
|
-
'animate-paused': 'paused',
|
|
322
|
-
}
|
|
323
|
-
return values[parsed.raw] ? { 'animation-play-state': values[parsed.raw] } : undefined
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Animation direction
|
|
327
|
-
export const animationDirectionRule: UtilityRule = (parsed) => {
|
|
328
|
-
const values: Record<string, string> = {
|
|
329
|
-
'animate-normal': 'normal',
|
|
330
|
-
'animate-reverse': 'reverse',
|
|
331
|
-
'animate-alternate': 'alternate',
|
|
332
|
-
'animate-alternate-reverse': 'alternate-reverse',
|
|
333
|
-
}
|
|
334
|
-
return values[parsed.raw] ? { 'animation-direction': values[parsed.raw] } : undefined
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
// Animation fill mode
|
|
338
|
-
export const animationFillModeRule: UtilityRule = (parsed) => {
|
|
339
|
-
const values: Record<string, string> = {
|
|
340
|
-
'animate-fill-none': 'none',
|
|
341
|
-
'animate-fill-forwards': 'forwards',
|
|
342
|
-
'animate-fill-backwards': 'backwards',
|
|
343
|
-
'animate-fill-both': 'both',
|
|
344
|
-
}
|
|
345
|
-
return values[parsed.raw] ? { 'animation-fill-mode': values[parsed.raw] } : undefined
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
// Animation iteration count
|
|
349
|
-
export const animationIterationRule: UtilityRule = (parsed) => {
|
|
350
|
-
if (parsed.utility === 'animate-iteration' && parsed.value) {
|
|
351
|
-
return { 'animation-iteration-count': parsed.value === 'infinite' ? 'infinite' : parsed.value }
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// Animation duration
|
|
356
|
-
export const animationDurationRule: UtilityRule = (parsed) => {
|
|
357
|
-
if (parsed.utility === 'animate-duration' && parsed.value) {
|
|
358
|
-
const durations: Record<string, string> = {
|
|
359
|
-
'75': '75ms', '100': '100ms', '150': '150ms', '200': '200ms',
|
|
360
|
-
'300': '300ms', '500': '500ms', '700': '700ms', '1000': '1000ms',
|
|
361
|
-
}
|
|
362
|
-
return { 'animation-duration': durations[parsed.value] || `${parsed.value}ms` }
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Animation delay
|
|
367
|
-
export const animationDelayRule: UtilityRule = (parsed) => {
|
|
368
|
-
if (parsed.utility === 'animate-delay' && parsed.value) {
|
|
369
|
-
const delays: Record<string, string> = {
|
|
370
|
-
'75': '75ms', '100': '100ms', '150': '150ms', '200': '200ms',
|
|
371
|
-
'300': '300ms', '500': '500ms', '700': '700ms', '1000': '1000ms',
|
|
372
|
-
}
|
|
373
|
-
return { 'animation-delay': delays[parsed.value] || `${parsed.value}ms` }
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// Animation timing function
|
|
378
|
-
export const animationTimingRule: UtilityRule = (parsed) => {
|
|
379
|
-
const values: Record<string, string> = {
|
|
380
|
-
'animate-ease-linear': 'linear',
|
|
381
|
-
'animate-ease-in': 'cubic-bezier(0.4, 0, 1, 1)',
|
|
382
|
-
'animate-ease-out': 'cubic-bezier(0, 0, 0.2, 1)',
|
|
383
|
-
'animate-ease-in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
384
|
-
}
|
|
385
|
-
return values[parsed.raw] ? { 'animation-timing-function': values[parsed.raw] } : undefined
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
export const transformsRules: UtilityRule[] = [
|
|
389
|
-
transformRule,
|
|
390
|
-
scaleRule,
|
|
391
|
-
rotateRule,
|
|
392
|
-
translateRule,
|
|
393
|
-
skewRule,
|
|
394
|
-
transformOriginRule,
|
|
395
|
-
perspectiveRule,
|
|
396
|
-
perspectiveOriginRule,
|
|
397
|
-
backfaceVisibilityRule,
|
|
398
|
-
transformStyleRule,
|
|
399
|
-
transitionPropertyRule,
|
|
400
|
-
transitionBehaviorRule,
|
|
401
|
-
transitionDurationRule,
|
|
402
|
-
transitionTimingRule,
|
|
403
|
-
transitionDelayRule,
|
|
404
|
-
animationRule,
|
|
405
|
-
animationPlayStateRule,
|
|
406
|
-
animationDirectionRule,
|
|
407
|
-
animationFillModeRule,
|
|
408
|
-
animationIterationRule,
|
|
409
|
-
animationDurationRule,
|
|
410
|
-
animationDelayRule,
|
|
411
|
-
animationTimingRule,
|
|
412
|
-
]
|