1mpacto-sass 0.0.2 → 0.0.4
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/_engine.scss +32 -0
- package/_preflight.scss +106 -48
- package/package.json +1 -1
- package/readme.md +6 -2
- package/tests/integration.test.scss +1 -0
- package/tests/run_tests.cjs +64 -61
package/_engine.scss
CHANGED
|
@@ -599,6 +599,7 @@ $browser-prefixes: (
|
|
|
599
599
|
$whitelist-responsive,
|
|
600
600
|
$whitelist-hover,
|
|
601
601
|
$whitelist-focus,
|
|
602
|
+
$whitelist-placeholder,
|
|
602
603
|
$class-prefix: '',
|
|
603
604
|
$var-prefix: ''
|
|
604
605
|
|
|
@@ -646,4 +647,35 @@ $browser-prefixes: (
|
|
|
646
647
|
@include generate-utility($class, $static-map, $dynamic-map, $var-prefix);
|
|
647
648
|
}
|
|
648
649
|
}
|
|
650
|
+
|
|
651
|
+
// 5. Placeholder
|
|
652
|
+
@each $class in $whitelist-placeholder {
|
|
653
|
+
$prefixed-class: apply-class-prefix($class, $class-prefix);
|
|
654
|
+
$selector-base: escape-classname('placeholder:' + $prefixed-class);
|
|
655
|
+
|
|
656
|
+
// Webkit
|
|
657
|
+
.#{$selector-base}::-webkit-input-placeholder {
|
|
658
|
+
@include generate-utility($class, $static-map, $dynamic-map, $var-prefix);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// Moz
|
|
662
|
+
.#{$selector-base}::-moz-placeholder {
|
|
663
|
+
@include generate-utility($class, $static-map, $dynamic-map, $var-prefix);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
// IE 10+
|
|
667
|
+
.#{$selector-base}:-ms-input-placeholder {
|
|
668
|
+
@include generate-utility($class, $static-map, $dynamic-map, $var-prefix);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// Edge
|
|
672
|
+
.#{$selector-base}::-ms-input-placeholder {
|
|
673
|
+
@include generate-utility($class, $static-map, $dynamic-map, $var-prefix);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// Standard
|
|
677
|
+
.#{$selector-base}::placeholder {
|
|
678
|
+
@include generate-utility($class, $static-map, $dynamic-map, $var-prefix);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
649
681
|
}
|
package/_preflight.scss
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
@mixin preflight($font-family-map: (), $border-color: #e5e7eb) {
|
|
5
5
|
// RESOLVE FONTS
|
|
6
6
|
$sans-font: map.get($font-family-map, 'sans');
|
|
7
|
+
|
|
7
8
|
@if not $sans-font {
|
|
8
9
|
$sans-font: (ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
$mono-font: map.get($font-family-map, 'mono');
|
|
13
|
+
|
|
12
14
|
@if not $mono-font {
|
|
13
15
|
$mono-font: (ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
|
|
14
16
|
}
|
|
@@ -26,10 +28,14 @@
|
|
|
26
28
|
*,
|
|
27
29
|
::before,
|
|
28
30
|
::after {
|
|
29
|
-
box-sizing: border-box;
|
|
30
|
-
|
|
31
|
-
border-
|
|
32
|
-
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
/* 1 */
|
|
33
|
+
border-width: 0;
|
|
34
|
+
/* 2 */
|
|
35
|
+
border-style: solid;
|
|
36
|
+
/* 2 */
|
|
37
|
+
border-color: #{$border-color};
|
|
38
|
+
/* 2 */
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
::before,
|
|
@@ -49,14 +55,23 @@
|
|
|
49
55
|
|
|
50
56
|
html,
|
|
51
57
|
:host {
|
|
52
|
-
line-height: 1.5;
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
58
|
+
line-height: 1.5;
|
|
59
|
+
/* 1 */
|
|
60
|
+
-webkit-text-size-adjust: 100%;
|
|
61
|
+
/* 2 */
|
|
62
|
+
-moz-tab-size: 4;
|
|
63
|
+
/* 3 */
|
|
64
|
+
-o-tab-size: 4;
|
|
65
|
+
tab-size: 4;
|
|
66
|
+
/* 3 */
|
|
67
|
+
font-family: $sans-font;
|
|
68
|
+
/* 4 */
|
|
69
|
+
font-feature-settings: normal;
|
|
70
|
+
/* 5 */
|
|
71
|
+
font-variation-settings: normal;
|
|
72
|
+
/* 6 */
|
|
73
|
+
-webkit-tap-highlight-color: transparent;
|
|
74
|
+
/* 7 */
|
|
60
75
|
}
|
|
61
76
|
|
|
62
77
|
/*
|
|
@@ -65,8 +80,10 @@
|
|
|
65
80
|
*/
|
|
66
81
|
|
|
67
82
|
body {
|
|
68
|
-
margin: 0;
|
|
69
|
-
|
|
83
|
+
margin: 0;
|
|
84
|
+
/* 1 */
|
|
85
|
+
line-height: inherit;
|
|
86
|
+
/* 2 */
|
|
70
87
|
}
|
|
71
88
|
|
|
72
89
|
/*
|
|
@@ -76,9 +93,12 @@
|
|
|
76
93
|
*/
|
|
77
94
|
|
|
78
95
|
hr {
|
|
79
|
-
height: 0;
|
|
80
|
-
|
|
81
|
-
|
|
96
|
+
height: 0;
|
|
97
|
+
/* 1 */
|
|
98
|
+
color: inherit;
|
|
99
|
+
/* 2 */
|
|
100
|
+
border-top-width: 1px;
|
|
101
|
+
/* 3 */
|
|
82
102
|
}
|
|
83
103
|
|
|
84
104
|
/*
|
|
@@ -86,6 +106,7 @@
|
|
|
86
106
|
*/
|
|
87
107
|
|
|
88
108
|
abbr:where([title]) {
|
|
109
|
+
-webkit-text-decoration: underline dotted;
|
|
89
110
|
text-decoration: underline dotted;
|
|
90
111
|
}
|
|
91
112
|
|
|
@@ -132,10 +153,14 @@
|
|
|
132
153
|
kbd,
|
|
133
154
|
samp,
|
|
134
155
|
pre {
|
|
135
|
-
font-family: $mono-font;
|
|
136
|
-
|
|
137
|
-
font-
|
|
138
|
-
|
|
156
|
+
font-family: $mono-font;
|
|
157
|
+
/* 1 */
|
|
158
|
+
font-feature-settings: normal;
|
|
159
|
+
/* 2 */
|
|
160
|
+
font-variation-settings: normal;
|
|
161
|
+
/* 3 */
|
|
162
|
+
font-size: 1em;
|
|
163
|
+
/* 4 */
|
|
139
164
|
}
|
|
140
165
|
|
|
141
166
|
/*
|
|
@@ -173,9 +198,12 @@
|
|
|
173
198
|
*/
|
|
174
199
|
|
|
175
200
|
table {
|
|
176
|
-
text-indent: 0;
|
|
177
|
-
|
|
178
|
-
border-
|
|
201
|
+
text-indent: 0;
|
|
202
|
+
/* 1 */
|
|
203
|
+
border-color: inherit;
|
|
204
|
+
/* 2 */
|
|
205
|
+
border-collapse: collapse;
|
|
206
|
+
/* 3 */
|
|
179
207
|
}
|
|
180
208
|
|
|
181
209
|
/*
|
|
@@ -189,15 +217,26 @@
|
|
|
189
217
|
optgroup,
|
|
190
218
|
select,
|
|
191
219
|
textarea {
|
|
192
|
-
font-family: inherit;
|
|
193
|
-
|
|
194
|
-
font-
|
|
195
|
-
|
|
196
|
-
font-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
220
|
+
font-family: inherit;
|
|
221
|
+
/* 1 */
|
|
222
|
+
font-feature-settings: inherit;
|
|
223
|
+
/* 1 */
|
|
224
|
+
font-variation-settings: inherit;
|
|
225
|
+
/* 1 */
|
|
226
|
+
font-size: 100%;
|
|
227
|
+
/* 1 */
|
|
228
|
+
font-weight: inherit;
|
|
229
|
+
/* 1 */
|
|
230
|
+
line-height: inherit;
|
|
231
|
+
/* 1 */
|
|
232
|
+
letter-spacing: inherit;
|
|
233
|
+
/* 1 */
|
|
234
|
+
color: inherit;
|
|
235
|
+
/* 1 */
|
|
236
|
+
margin: 0;
|
|
237
|
+
/* 2 */
|
|
238
|
+
padding: 0;
|
|
239
|
+
/* 3 */
|
|
201
240
|
}
|
|
202
241
|
|
|
203
242
|
/*
|
|
@@ -215,12 +254,15 @@
|
|
|
215
254
|
*/
|
|
216
255
|
|
|
217
256
|
button,
|
|
218
|
-
[type='button'],
|
|
219
|
-
[type='reset'],
|
|
220
|
-
[type='submit'] {
|
|
221
|
-
-webkit-appearance: button;
|
|
222
|
-
|
|
223
|
-
background-
|
|
257
|
+
input:where([type='button']),
|
|
258
|
+
input:where([type='reset']),
|
|
259
|
+
input:where([type='submit']) {
|
|
260
|
+
-webkit-appearance: button;
|
|
261
|
+
/* 1 */
|
|
262
|
+
background-color: transparent;
|
|
263
|
+
/* 2 */
|
|
264
|
+
background-image: none;
|
|
265
|
+
/* 2 */
|
|
224
266
|
}
|
|
225
267
|
|
|
226
268
|
/*
|
|
@@ -262,8 +304,10 @@
|
|
|
262
304
|
*/
|
|
263
305
|
|
|
264
306
|
[type='search'] {
|
|
265
|
-
-webkit-appearance: textfield;
|
|
266
|
-
|
|
307
|
+
-webkit-appearance: textfield;
|
|
308
|
+
/* 1 */
|
|
309
|
+
outline-offset: -2px;
|
|
310
|
+
/* 2 */
|
|
267
311
|
}
|
|
268
312
|
|
|
269
313
|
/*
|
|
@@ -280,8 +324,10 @@
|
|
|
280
324
|
*/
|
|
281
325
|
|
|
282
326
|
::-webkit-file-upload-button {
|
|
283
|
-
-webkit-appearance: button;
|
|
284
|
-
|
|
327
|
+
-webkit-appearance: button;
|
|
328
|
+
/* 1 */
|
|
329
|
+
font: inherit;
|
|
330
|
+
/* 2 */
|
|
285
331
|
}
|
|
286
332
|
|
|
287
333
|
/*
|
|
@@ -349,10 +395,20 @@
|
|
|
349
395
|
2. Set the default placeholder color to the user's configured gray 400 color.
|
|
350
396
|
*/
|
|
351
397
|
|
|
398
|
+
input::-moz-placeholder,
|
|
399
|
+
textarea::-moz-placeholder {
|
|
400
|
+
opacity: 1;
|
|
401
|
+
/* 1 */
|
|
402
|
+
color: #9ca3af;
|
|
403
|
+
/* 2 */
|
|
404
|
+
}
|
|
405
|
+
|
|
352
406
|
input::placeholder,
|
|
353
407
|
textarea::placeholder {
|
|
354
|
-
opacity: 1;
|
|
355
|
-
|
|
408
|
+
opacity: 1;
|
|
409
|
+
/* 1 */
|
|
410
|
+
color: #9ca3af;
|
|
411
|
+
/* 2 */
|
|
356
412
|
}
|
|
357
413
|
|
|
358
414
|
/*
|
|
@@ -386,8 +442,10 @@
|
|
|
386
442
|
iframe,
|
|
387
443
|
embed,
|
|
388
444
|
object {
|
|
389
|
-
display: block;
|
|
390
|
-
|
|
445
|
+
display: block;
|
|
446
|
+
/* 1 */
|
|
447
|
+
vertical-align: middle;
|
|
448
|
+
/* 2 */
|
|
391
449
|
}
|
|
392
450
|
|
|
393
451
|
/*
|
|
@@ -404,4 +462,4 @@
|
|
|
404
462
|
[hidden] {
|
|
405
463
|
display: none;
|
|
406
464
|
}
|
|
407
|
-
}
|
|
465
|
+
}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -9,7 +9,7 @@ Generator ini dibuat sebagai pengganti Tailwind CSS untuk proyek yang membutuhka
|
|
|
9
9
|
3. **Arbitrary Values**: Mendukung nilai kustom langsung di classname, contoh: `w-[500px]`, `m-[calc(100%+20px)]`.
|
|
10
10
|
4. **Negative Values**: Mendukung nilai negatif dengan prefix `-`, contoh: `-m-4`, `-rotate-45`.
|
|
11
11
|
5. **Important Modifier**: Mendukung prefix `!` untuk `!important`, contoh: `!p-4`.
|
|
12
|
-
6. **Responsive & States**: Mendukung breakpoint (`sm:`, `md:`, dll) dan state (`hover:`, `focus:`).
|
|
12
|
+
6. **Responsive & States**: Mendukung breakpoint (`sm:`, `md:`, dll) dan state (`hover:`, `focus:`, `placeholder:`).
|
|
13
13
|
7. **Namespace Isolation**: Mendukung prefix global untuk semua class (misal `1ru-`) dan variable CSS untuk mencegah konflik.
|
|
14
14
|
|
|
15
15
|
---
|
|
@@ -383,10 +383,11 @@ $whitelistresponsive: (
|
|
|
383
383
|
```
|
|
384
384
|
|
|
385
385
|
### State Classes
|
|
386
|
-
Class untuk hover atau
|
|
386
|
+
Class untuk hover, focus, atau placeholder.
|
|
387
387
|
```scss
|
|
388
388
|
$whitelisthover: ('bg-gray-100', 'text-red-500'); // Menjadi .hover:bg-gray-100:hover
|
|
389
389
|
$whitelistfocus: ('ring-2'); // Menjadi .focus:ring-2:focus
|
|
390
|
+
$whitelistplaceholder: ('text-gray-400'); // Menjadi .placeholder:text-gray-400::placeholder
|
|
390
391
|
```
|
|
391
392
|
|
|
392
393
|
---
|
|
@@ -552,6 +553,8 @@ $whitelisthover : ();
|
|
|
552
553
|
// Whitelist Hover
|
|
553
554
|
$whitelistfocus : ();
|
|
554
555
|
// Whitelist Focus
|
|
556
|
+
$whitelistplaceholder : ();
|
|
557
|
+
// Whitelist Placeholder
|
|
555
558
|
|
|
556
559
|
|
|
557
560
|
@include engine.generatorStyle(config.$static-utilities-map,
|
|
@@ -582,6 +585,7 @@ $whitelistfocus : ();
|
|
|
582
585
|
$whitelistresponsive,
|
|
583
586
|
$whitelisthover,
|
|
584
587
|
$whitelistfocus,
|
|
588
|
+
$whitelistplaceholder,
|
|
585
589
|
'my-prefix-', // Custom Class Prefix (param ke-8)
|
|
586
590
|
'my-var-' // Custom Var Prefix (param ke-9)
|
|
587
591
|
);
|
|
@@ -165,5 +165,6 @@ $test-cases-base: ( // --- STATIC UTILITIES ---
|
|
|
165
165
|
$whitelist-responsive: ('sm': $test-cases-base, '2xl': $test-cases-base),
|
|
166
166
|
$whitelist-hover: $test-cases-base,
|
|
167
167
|
$whitelist-focus: $test-cases-base,
|
|
168
|
+
$whitelist-placeholder: $test-cases-base,
|
|
168
169
|
$var-prefix: 'is'
|
|
169
170
|
);
|
package/tests/run_tests.cjs
CHANGED
|
@@ -107,6 +107,9 @@ function parseRules(content) {
|
|
|
107
107
|
} else if (cleanSelector.includes(':focus')) {
|
|
108
108
|
variant = 'focus';
|
|
109
109
|
cleanSelector = cleanSelector.replace(':focus', '');
|
|
110
|
+
} else if (cleanSelector.includes('::placeholder')) {
|
|
111
|
+
variant = 'placeholder';
|
|
112
|
+
cleanSelector = cleanSelector.replace('::placeholder', '');
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
// Remove leading dot
|
|
@@ -161,8 +164,8 @@ function assertRule(rules, testCase) {
|
|
|
161
164
|
if (!checkProps(baseRule, testCase.expected, testCase.class, 'Base')) allVariantsPassed = false;
|
|
162
165
|
}
|
|
163
166
|
|
|
164
|
-
// 2. Validate Pseudo-classes (hover, focus)
|
|
165
|
-
else if (variant === 'hover' || variant === 'focus') {
|
|
167
|
+
// 2. Validate Pseudo-classes (hover, focus, placeholder)
|
|
168
|
+
else if (variant === 'hover' || variant === 'focus' || variant === 'placeholder') {
|
|
166
169
|
const pseudoClass = `${variant}:${testCase.class}`;
|
|
167
170
|
const pseudoRule = rules.find(r => r.className === pseudoClass && r.variant === variant);
|
|
168
171
|
if (!checkProps(pseudoRule, testCase.expected, pseudoClass, capitalize(variant))) allVariantsPassed = false;
|
|
@@ -222,90 +225,90 @@ function runTests() {
|
|
|
222
225
|
// List of test cases covering all categories defined in integration.test.scss
|
|
223
226
|
const testCases = [
|
|
224
227
|
// --- STATIC UTILITIES ---
|
|
225
|
-
{ class: 'block', expected: { 'display': 'block' }, variants: ['base', 'hover', 'focus', 'sm', '2xl'] },
|
|
226
|
-
{ class: 'fixed', expected: { 'position': 'fixed' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
227
|
-
{ class: 'flex-row', expected: { 'flex-direction': 'row' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
228
|
-
{ class: 'items-center', expected: { 'align-items': 'center' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
229
|
-
{ class: 'text-center', expected: { 'text-align': 'center' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
230
|
-
{ class: 'border-none', expected: { 'border-style': 'none' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
231
|
-
{ class: 'cursor-pointer', expected: { 'cursor': 'pointer' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
232
|
-
{ class: 'truncate', expected: { 'overflow': 'hidden', 'text-overflow': 'ellipsis', 'white-space': 'nowrap' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
233
|
-
{ class: 'flex-1', expected: { 'flex': '1 1 0%' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
234
|
-
{ class: 'justify-between', expected: { 'justify-content': 'space-between' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
235
|
-
{ class: 'uppercase', expected: { 'text-transform': 'uppercase' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
236
|
-
{ class: 'underline', expected: { 'text-decoration': 'underline' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
237
|
-
{ class: 'italic', expected: { 'font-style': 'italic' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
238
|
-
{ class: 'list-disc', expected: { 'list-style-type': 'disc' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
239
|
-
{ class: 'align-middle', expected: { 'vertical-align': 'middle' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
240
|
-
{ class: 'overflow-hidden', expected: { 'overflow': 'hidden' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
241
|
-
{ class: 'object-cover', expected: { 'object-fit': 'cover' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
242
|
-
{ class: 'bg-cover', expected: { 'background-size': 'cover' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
243
|
-
{ class: 'outline-none', expected: { 'outline': '2px solid transparent', 'outline-offset': '2px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
244
|
-
{ class: 'border-collapse', expected: { 'border-collapse': 'collapse' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
245
|
-
{ class: 'select-none', expected: { 'user-select': 'none' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
246
|
-
{ class: 'appearance-none', expected: { 'appearance': 'none' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
228
|
+
{ class: 'block', expected: { 'display': 'block' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm', '2xl'] },
|
|
229
|
+
{ class: 'fixed', expected: { 'position': 'fixed' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
230
|
+
{ class: 'flex-row', expected: { 'flex-direction': 'row' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
231
|
+
{ class: 'items-center', expected: { 'align-items': 'center' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
232
|
+
{ class: 'text-center', expected: { 'text-align': 'center' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
233
|
+
{ class: 'border-none', expected: { 'border-style': 'none' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
234
|
+
{ class: 'cursor-pointer', expected: { 'cursor': 'pointer' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
235
|
+
{ class: 'truncate', expected: { 'overflow': 'hidden', 'text-overflow': 'ellipsis', 'white-space': 'nowrap' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
236
|
+
{ class: 'flex-1', expected: { 'flex': '1 1 0%' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
237
|
+
{ class: 'justify-between', expected: { 'justify-content': 'space-between' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
238
|
+
{ class: 'uppercase', expected: { 'text-transform': 'uppercase' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
239
|
+
{ class: 'underline', expected: { 'text-decoration': 'underline' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
240
|
+
{ class: 'italic', expected: { 'font-style': 'italic' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
241
|
+
{ class: 'list-disc', expected: { 'list-style-type': 'disc' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
242
|
+
{ class: 'align-middle', expected: { 'vertical-align': 'middle' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
243
|
+
{ class: 'overflow-hidden', expected: { 'overflow': 'hidden' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
244
|
+
{ class: 'object-cover', expected: { 'object-fit': 'cover' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
245
|
+
{ class: 'bg-cover', expected: { 'background-size': 'cover' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
246
|
+
{ class: 'outline-none', expected: { 'outline': '2px solid transparent', 'outline-offset': '2px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
247
|
+
{ class: 'border-collapse', expected: { 'border-collapse': 'collapse' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
248
|
+
{ class: 'select-none', expected: { 'user-select': 'none' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
249
|
+
{ class: 'appearance-none', expected: { 'appearance': 'none' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
247
250
|
|
|
248
251
|
// --- DYNAMIC UTILITIES (SPACING) ---
|
|
249
|
-
{ class: 'p-1', expected: { 'padding': '0.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
250
|
-
{ class: 'px-1', expected: { 'padding-left': '0.25rem', 'padding-right': '0.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
251
|
-
{ class: 'm-1', expected: { 'margin': '0.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
252
|
-
{ class: '-m-1', expected: { 'margin': '-0.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
252
|
+
{ class: 'p-1', expected: { 'padding': '0.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
253
|
+
{ class: 'px-1', expected: { 'padding-left': '0.25rem', 'padding-right': '0.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
254
|
+
{ class: 'm-1', expected: { 'margin': '0.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
255
|
+
{ class: '-m-1', expected: { 'margin': '-0.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
253
256
|
|
|
254
257
|
// --- DYNAMIC UTILITIES (FLEX/GRID) ---
|
|
255
|
-
{ class: 'gap-1', expected: { 'gap': '0.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
256
|
-
{ class: 'basis-1', expected: { 'flex-basis': '0.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
257
|
-
{ class: 'order-1', expected: { 'order': '1' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
258
|
+
{ class: 'gap-1', expected: { 'gap': '0.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
259
|
+
{ class: 'basis-1', expected: { 'flex-basis': '0.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
260
|
+
{ class: 'order-1', expected: { 'order': '1' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
258
261
|
|
|
259
262
|
// --- DYNAMIC UTILITIES (POSITIONING) ---
|
|
260
|
-
{ class: 'top-0', expected: { 'top': '0px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
261
|
-
{ class: 'inset-0', expected: { 'top': '0px', 'right': '0px', 'bottom': '0px', 'left': '0px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
263
|
+
{ class: 'top-0', expected: { 'top': '0px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
264
|
+
{ class: 'inset-0', expected: { 'top': '0px', 'right': '0px', 'bottom': '0px', 'left': '0px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
262
265
|
|
|
263
266
|
// --- DYNAMIC UTILITIES (SIZING) ---
|
|
264
|
-
{ class: 'w-full', expected: { 'width': '100%' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
265
|
-
{ class: 'h-screen', expected: { 'height': '100vh' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
267
|
+
{ class: 'w-full', expected: { 'width': '100%' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
268
|
+
{ class: 'h-screen', expected: { 'height': '100vh' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
266
269
|
|
|
267
270
|
// --- DYNAMIC UTILITIES (TYPOGRAPHY) ---
|
|
268
|
-
{ class: 'text-sm', expected: { 'font-size': '0.875rem', 'line-height': '1.25rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
269
|
-
{ class: 'text-primary', expected: { 'color': '#007bff' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
270
|
-
{ class: 'font-bold', expected: { 'font-weight': '700' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
271
|
-
{ class: 'leading-4', expected: { 'line-height': '1rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
272
|
-
{ class: 'tracking-wide', expected: { 'letter-spacing': '0.025em' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
273
|
-
{ class: 'line-clamp-2', expected: { 'overflow': 'hidden', 'display': '-webkit-box', '-webkit-line-clamp': '2' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
271
|
+
{ class: 'text-sm', expected: { 'font-size': '0.875rem', 'line-height': '1.25rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
272
|
+
{ class: 'text-primary', expected: { 'color': '#007bff' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
273
|
+
{ class: 'font-bold', expected: { 'font-weight': '700' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
274
|
+
{ class: 'leading-4', expected: { 'line-height': '1rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
275
|
+
{ class: 'tracking-wide', expected: { 'letter-spacing': '0.025em' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
276
|
+
{ class: 'line-clamp-2', expected: { 'overflow': 'hidden', 'display': '-webkit-box', '-webkit-line-clamp': '2' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
274
277
|
|
|
275
278
|
// --- DYNAMIC UTILITIES (BACKGROUND) ---
|
|
276
|
-
{ class: 'bg-primary', expected: { 'background-color': '#007bff' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
279
|
+
{ class: 'bg-primary', expected: { 'background-color': '#007bff' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
277
280
|
|
|
278
281
|
// --- DYNAMIC UTILITIES (BORDER) ---
|
|
279
|
-
{ class: 'border-primary', expected: { 'border-color': '#007bff' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
280
|
-
{ class: 'border-2', expected: { 'border-width': '2px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
281
|
-
{ class: 'rounded-md', expected: { 'border-radius': '0.375rem' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
282
|
+
{ class: 'border-primary', expected: { 'border-color': '#007bff' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
283
|
+
{ class: 'border-2', expected: { 'border-width': '2px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
284
|
+
{ class: 'rounded-md', expected: { 'border-radius': '0.375rem' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
282
285
|
|
|
283
|
-
{ class: 'ring-2', expected: { 'box-shadow': 'var(--is-ring-inset, ) 0 0 0 2px var(--is-ring-color, #3b82f6)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
284
|
-
{ class: 'outline-2', expected: { 'outline-width': '2px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
286
|
+
{ class: 'ring-2', expected: { 'box-shadow': 'var(--is-ring-inset, ) 0 0 0 2px var(--is-ring-color, #3b82f6)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
287
|
+
{ class: 'outline-2', expected: { 'outline-width': '2px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
285
288
|
|
|
286
289
|
// --- DYNAMIC UTILITIES (EFFECTS) ---
|
|
287
|
-
{ class: 'opacity-50', expected: { 'opacity': '0.5' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
288
|
-
{ class: 'z-10', expected: { 'z-index': '10' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
289
|
-
{ class: 'shadow-sm', expected: { 'box-shadow': '0 1px 2px 0 var(--is-shadow-color, rgba(0, 0, 0, 0.05))' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
290
|
+
{ class: 'opacity-50', expected: { 'opacity': '0.5' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
291
|
+
{ class: 'z-10', expected: { 'z-index': '10' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
292
|
+
{ class: 'shadow-sm', expected: { 'box-shadow': '0 1px 2px 0 var(--is-shadow-color, rgba(0, 0, 0, 0.05))' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
290
293
|
|
|
291
294
|
// --- DYNAMIC UTILITIES (TRANSFORM) ---
|
|
292
|
-
{ class: 'scale-50', expected: { 'transform': 'scale(0.5)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
293
|
-
{ class: 'rotate-45', expected: { 'transform': 'rotate(45deg)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
294
|
-
{ class: 'skew-x-6', expected: { 'transform': 'skewX(6deg)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
295
|
-
{ class: 'translate-x-4', expected: { 'transform': 'translateX(1rem)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
295
|
+
{ class: 'scale-50', expected: { 'transform': 'scale(0.5)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
296
|
+
{ class: 'rotate-45', expected: { 'transform': 'rotate(45deg)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
297
|
+
{ class: 'skew-x-6', expected: { 'transform': 'skewX(6deg)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
298
|
+
{ class: 'translate-x-4', expected: { 'transform': 'translateX(1rem)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
296
299
|
|
|
297
300
|
// --- DYNAMIC UTILITIES (TRANSITION) ---
|
|
298
|
-
{ class: 'duration-300', expected: { 'transition-duration': '300ms' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
299
|
-
{ class: 'delay-100', expected: { 'transition-delay': '100ms' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
300
|
-
{ class: 'ease-in', expected: { 'transition-timing-function': 'cubic-bezier(0.4, 0, 1, 1)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
301
|
+
{ class: 'duration-300', expected: { 'transition-duration': '300ms' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
302
|
+
{ class: 'delay-100', expected: { 'transition-delay': '100ms' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
303
|
+
{ class: 'ease-in', expected: { 'transition-timing-function': 'cubic-bezier(0.4, 0, 1, 1)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
301
304
|
|
|
302
305
|
// --- DYNAMIC ARBITRARY ---
|
|
303
|
-
{ class: 'p-[17px]', expected: { 'padding': '17px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
304
|
-
{ class: 'w-[33.3%]', expected: { 'width': '33.3%' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
305
|
-
{ class: 'm-[100px]', expected: { 'margin': '100px' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
306
|
+
{ class: 'p-[17px]', expected: { 'padding': '17px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
307
|
+
{ class: 'w-[33.3%]', expected: { 'width': '33.3%' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
308
|
+
{ class: 'm-[100px]', expected: { 'margin': '100px' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
306
309
|
|
|
307
310
|
// --- BORDER SPACING ---
|
|
308
|
-
{ class: 'border-spacing-2', expected: { 'border-spacing': 'var(--is-border-spacing-x) var(--is-border-spacing-y)' }, variants: ['base', 'hover', 'focus', 'sm'] },
|
|
311
|
+
{ class: 'border-spacing-2', expected: { 'border-spacing': 'var(--is-border-spacing-x) var(--is-border-spacing-y)' }, variants: ['base', 'hover', 'focus', 'placeholder', 'sm'] },
|
|
309
312
|
];
|
|
310
313
|
|
|
311
314
|
testCases.forEach(test => {
|