@@ -2,80 +2,187 @@ import { expect, it } from 'vitest'
2
2
import { toCss } from '../ast'
3
3
import { replaceShadowColors } from './replace-shadow-colors'
4
4
5
- const table = [
6
- {
7
- input : [ 'text-shadow' , 'var(--my-shadow)' ] ,
8
- output : 'text-shadow: var(--my-shadow);' ,
9
- } ,
10
- {
11
- input : [ 'text-shadow' , '1px var(--my-shadow)' ] ,
12
- output : 'text-shadow: 1px var(--my-shadow);' ,
13
- } ,
14
- {
15
- input : [ 'text-shadow' , '1px 1px var(--my-color)' ] ,
16
- output : 'text-shadow: 1px 1px var(--tw-shadow-color, var(--my-color));' ,
17
- } ,
18
- {
19
- input : [ 'text-shadow' , '0 0 0 var(--my-color)' ] ,
20
- output : 'text-shadow: 0 0 0 var(--tw-shadow-color, var(--my-color));' ,
21
- } ,
22
- {
23
- input : [ 'text-shadow' , '1px 2px' ] ,
24
- output : 'text-shadow: 1px 2px var(--tw-shadow-color, currentcolor);' ,
25
- } ,
26
- {
27
- input : [ 'text-shadow' , '1px 2px 3px' ] ,
28
- output : 'text-shadow: 1px 2px 3px var(--tw-shadow-color, currentcolor);' ,
29
- } ,
30
- {
31
- input : [ 'text-shadow' , '1px 2px 3px 4px' ] ,
32
- output : 'text-shadow: 1px 2px 3px 4px var(--tw-shadow-color, currentcolor);' ,
33
- } ,
34
- {
35
- input : [
36
- 'text-shadow' ,
37
- [ 'var(--my-shadow)' , '1px 1px var(--my-color)' , '0 0 1px var(--my-color)' ] . join ( ', ' ) ,
38
- ] ,
39
- output : `text-shadow: ${ [
40
- 'var(--my-shadow)' ,
41
- '1px 1px var(--tw-shadow-color, var(--my-color))' ,
42
- '0 0 1px var(--tw-shadow-color, var(--my-color))' ,
43
- ] . join ( ', ' ) } ;`,
44
- } ,
45
- {
46
- input : [ 'text-shadow' , '1px 1px var(--my-color)' ] ,
47
- intensity : '50%' ,
48
- output : 'text-shadow: 1px 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%));' ,
49
- } ,
50
- {
51
- input : [ 'text-shadow' , '1px 2px 3px 4px' ] ,
52
- intensity : '50%' ,
53
- output :
54
- 'text-shadow: 1px 2px 3px 4px var(--tw-shadow-color, oklab(from currentcolor l a b / 50%));' ,
55
- } ,
56
- {
57
- input : [
58
- 'text-shadow' ,
59
- [ 'var(--my-shadow)' , '1px 1px var(--my-color)' , '0 0 1px var(--my-color)' ] . join ( ', ' ) ,
60
- ] ,
61
- intensity : '50%' ,
62
- output : `text-shadow: ${ [
63
- 'var(--my-shadow)' ,
64
- '1px 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%))' ,
65
- '0 0 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%))' ,
66
- ] . join ( ', ' ) } ;`,
67
- } ,
68
- ]
5
+ it ( 'should handle var shadow' , ( ) => {
6
+ let parsed = replaceShadowColors (
7
+ 'text-shadow' ,
8
+ 'var(--my-shadow)' ,
9
+ null ,
10
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
11
+ )
12
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot ( '"text-shadow: var(--my-shadow);"' )
13
+ } )
69
14
70
- it . each ( table ) (
71
- 'should replace the color of box-shadow $input with $output' ,
72
- ( { input, intensity = null , output } ) => {
73
- let parsed = replaceShadowColors (
74
- input [ 0 ] ,
75
- input [ 1 ] ,
76
- intensity ,
77
- ( color ) => `var(--tw-shadow-color, ${ color } )` ,
78
- )
79
- expect ( toCss ( parsed ) . trim ( ) ) . toEqual ( output )
80
- } ,
81
- )
15
+ it ( 'should handle var shadow with offset' , ( ) => {
16
+ let parsed = replaceShadowColors (
17
+ 'text-shadow' ,
18
+ '1px var(--my-shadow)' ,
19
+ null ,
20
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
21
+ )
22
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot ( '"text-shadow: 1px var(--my-shadow);"' )
23
+ } )
24
+
25
+ it ( 'should handle var color with offsets' , ( ) => {
26
+ let parsed = replaceShadowColors (
27
+ 'text-shadow' ,
28
+ '1px 1px var(--my-color)' ,
29
+ null ,
30
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
31
+ )
32
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
33
+ `
34
+ "text-shadow: 1px 1px var(--tw-shadow-color, var(--my-color));"
35
+ ` ,
36
+ )
37
+ } )
38
+
39
+ it ( 'should handle var color with zero offsets' , ( ) => {
40
+ let parsed = replaceShadowColors (
41
+ 'text-shadow' ,
42
+ '0 0 0 var(--my-color)' ,
43
+ null ,
44
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
45
+ )
46
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
47
+ `
48
+ "text-shadow: 0 0 0 var(--tw-shadow-color, var(--my-color));"
49
+ ` ,
50
+ )
51
+ } )
52
+
53
+ it ( 'should handle two values with currentcolor' , ( ) => {
54
+ let parsed = replaceShadowColors (
55
+ 'text-shadow' ,
56
+ '1px 2px' ,
57
+ null ,
58
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
59
+ )
60
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
61
+ `
62
+ "text-shadow: 1px 2px var(--tw-shadow-color, currentcolor);"
63
+ ` ,
64
+ )
65
+ } )
66
+
67
+ it ( 'should handle three values with currentcolor' , ( ) => {
68
+ let parsed = replaceShadowColors (
69
+ 'text-shadow' ,
70
+ '1px 2px 3px' ,
71
+ null ,
72
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
73
+ )
74
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
75
+ `
76
+ "text-shadow: 1px 2px 3px var(--tw-shadow-color, currentcolor);"
77
+ ` ,
78
+ )
79
+ } )
80
+
81
+ it ( 'should handle four values with currentcolor' , ( ) => {
82
+ let parsed = replaceShadowColors (
83
+ 'text-shadow' ,
84
+ '1px 2px 3px 4px' ,
85
+ null ,
86
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
87
+ )
88
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
89
+ `
90
+ "text-shadow: 1px 2px 3px 4px var(--tw-shadow-color, currentcolor);"
91
+ ` ,
92
+ )
93
+ } )
94
+
95
+ it ( 'should handle multiple shadows' , ( ) => {
96
+ let parsed = replaceShadowColors (
97
+ 'text-shadow' ,
98
+ [ 'var(--my-shadow)' , '1px 1px var(--my-color)' , '0 0 1px var(--my-color)' ] . join ( ', ' ) ,
99
+ null ,
100
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
101
+ )
102
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
103
+ `
104
+ "text-shadow: var(--my-shadow), 1px 1px var(--tw-shadow-color, var(--my-color)), 0 0 1px var(--tw-shadow-color, var(--my-color));"
105
+ ` ,
106
+ )
107
+ } )
108
+
109
+ it ( 'should handle var color with intensity' , ( ) => {
110
+ let parsed = replaceShadowColors (
111
+ 'text-shadow' ,
112
+ '1px 1px var(--my-color)' ,
113
+ '50%' ,
114
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
115
+ )
116
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
117
+ `
118
+ "text-shadow: 1px 1px var(--tw-shadow-color, var(--my-color));
119
+ @supports (color: lab(from red l a b)) {
120
+ text-shadow: 1px 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%));
121
+ }"
122
+ ` ,
123
+ )
124
+ } )
125
+
126
+ it ( 'should handle box-shadow with intensity' , ( ) => {
127
+ let parsed = replaceShadowColors (
128
+ 'box-shadow' ,
129
+ '1px 1px var(--my-color)' ,
130
+ '50%' ,
131
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
132
+ )
133
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
134
+ `
135
+ "box-shadow: 1px 1px var(--tw-shadow-color, var(--my-color));
136
+ @supports (color: lab(from red l a b)) {
137
+ box-shadow: 1px 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%));
138
+ }"
139
+ ` ,
140
+ )
141
+ } )
142
+
143
+ it ( 'should handle box-shadow with inset prefix and intensity' , ( ) => {
144
+ let parsed = replaceShadowColors (
145
+ 'box-shadow' ,
146
+ '1px 1px var(--my-color)' ,
147
+ '50%' ,
148
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
149
+ 'inset ' ,
150
+ )
151
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
152
+ `
153
+ "box-shadow: inset 1px 1px var(--tw-shadow-color, var(--my-color));
154
+ @supports (color: lab(from red l a b)) {
155
+ box-shadow: inset 1px 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%));
156
+ }"
157
+ ` ,
158
+ )
159
+ } )
160
+
161
+ it ( 'should handle four values with intensity and no color value' , ( ) => {
162
+ let parsed = replaceShadowColors (
163
+ 'text-shadow' ,
164
+ '1px 2px 3px 4px' ,
165
+ '50%' ,
166
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
167
+ )
168
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
169
+ `"text-shadow: 1px 2px 3px 4px var(--tw-shadow-color, color-mix(in oklab, currentcolor 50%, transparent));"` ,
170
+ )
171
+ } )
172
+
173
+ it ( 'should handle multiple shadows with intensity' , ( ) => {
174
+ let parsed = replaceShadowColors (
175
+ 'text-shadow' ,
176
+ [ 'var(--my-shadow)' , '1px 1px var(--my-color)' , '0 0 1px var(--my-color)' ] . join ( ', ' ) ,
177
+ '50%' ,
178
+ ( color ) => `var(--tw-shadow-color, ${ color } )` ,
179
+ )
180
+ expect ( toCss ( parsed ) . trim ( ) ) . toMatchInlineSnapshot (
181
+ `
182
+ "text-shadow: var(--my-shadow), 1px 1px var(--tw-shadow-color, var(--my-color)), 0 0 1px var(--tw-shadow-color, var(--my-color));
183
+ @supports (color: lab(from red l a b)) {
184
+ text-shadow: var(--my-shadow), 1px 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%)), 0 0 1px var(--tw-shadow-color, oklab(from var(--my-color) l a b / 50%));
185
+ }"
186
+ ` ,
187
+ )
188
+ } )
0 commit comments