@@ -12,13 +12,15 @@ it('should return a list of variants with meta information about the variant', (
12
12
expect ( variants ) . toContainEqual ( {
13
13
name : 'hover' ,
14
14
isArbitrary : false ,
15
+ hasDash : true ,
15
16
values : [ ] ,
16
17
selectors : expect . any ( Function ) ,
17
18
} )
18
19
19
20
expect ( variants ) . toContainEqual ( {
20
21
name : 'group' ,
21
22
isArbitrary : true ,
23
+ hasDash : true ,
22
24
values : expect . any ( Array ) ,
23
25
selectors : expect . any ( Function ) ,
24
26
} )
@@ -138,3 +140,47 @@ it('should work for plugins that still use the modifySelectors API', () => {
138
140
let variant = variants . find ( ( v ) => v . name === 'foo' )
139
141
expect ( variant . selectors ( { } ) ) . toEqual ( [ '@supports (display: grid) { .foo .foo\\:& }' ] )
140
142
} )
143
+
144
+ it ( 'should special case the `@`' , ( ) => {
145
+ let config = {
146
+ plugins : [
147
+ ( { matchVariant } ) => {
148
+ matchVariant (
149
+ '@' ,
150
+ ( value , { modifier } ) => `@container ${ modifier ?? '' } (min-width: ${ value } )` ,
151
+ {
152
+ modifiers : 'any' ,
153
+ values : {
154
+ xs : '20rem' ,
155
+ sm : '24rem' ,
156
+ md : '28rem' ,
157
+ lg : '32rem' ,
158
+ xl : '36rem' ,
159
+ '2xl' : '42rem' ,
160
+ '3xl' : '48rem' ,
161
+ '4xl' : '56rem' ,
162
+ '5xl' : '64rem' ,
163
+ '6xl' : '72rem' ,
164
+ '7xl' : '80rem' ,
165
+ } ,
166
+ }
167
+ )
168
+ } ,
169
+ ] ,
170
+ }
171
+ let context = createContext ( resolveConfig ( config ) )
172
+
173
+ let variants = context . getVariants ( )
174
+
175
+ let variant = variants . find ( ( v ) => v . name === '@' )
176
+ expect ( variant ) . toEqual ( {
177
+ name : '@' ,
178
+ isArbitrary : true ,
179
+ hasDash : false ,
180
+ values : expect . any ( Array ) ,
181
+ selectors : expect . any ( Function ) ,
182
+ } )
183
+ expect ( variant . selectors ( { value : 'xs' , modifier : 'foo' } ) ) . toEqual ( [
184
+ '@container foo (min-width: 20rem)' ,
185
+ ] )
186
+ } )
0 commit comments