@@ -22,6 +22,8 @@ import isValidArbitraryValue from '../util/isValidArbitraryValue'
22
22
import { generateRules } from './generateRules'
23
23
import { hasContentChanged } from './cacheInvalidation.js'
24
24
25
+ let MATCH_VARIANT = Symbol ( )
26
+
25
27
function prefix ( context , selector ) {
26
28
let prefix = context . tailwindConfig . prefix
27
29
return typeof prefix === 'function' ? prefix ( selector ) : prefix + selector
@@ -215,13 +217,18 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
215
217
return context . tailwindConfig . prefix + identifier
216
218
}
217
219
218
- return {
220
+ let api = {
219
221
addVariant ( variantName , variantFunctions , options = { } ) {
220
222
variantFunctions = [ ] . concat ( variantFunctions ) . map ( ( variantFunction ) => {
221
223
if ( typeof variantFunction !== 'string' ) {
222
224
// Safelist public API functions
223
- return ( { modifySelectors, container, separator } ) => {
224
- return variantFunction ( { modifySelectors, container, separator } )
225
+ return ( { args, modifySelectors, container, separator } ) => {
226
+ return variantFunction (
227
+ Object . assign (
228
+ { modifySelectors, container, separator } ,
229
+ variantFunction [ MATCH_VARIANT ] && { args }
230
+ )
231
+ )
225
232
}
226
233
}
227
234
@@ -444,7 +451,18 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
444
451
context . candidateRuleMap . get ( prefixedIdentifier ) . push ( withOffsets )
445
452
}
446
453
} ,
454
+ matchVariant : function ( variants , options ) {
455
+ for ( let variant in variants ) {
456
+ api . addVariant (
457
+ variant ,
458
+ Object . assign ( ( { args } ) => variants [ variant ] ( args ) , { [ MATCH_VARIANT ] : true } ) ,
459
+ options
460
+ )
461
+ }
462
+ } ,
447
463
}
464
+
465
+ return api
448
466
}
449
467
450
468
let fileModifiedMapCache = new WeakMap ( )
0 commit comments