@@ -24,32 +24,38 @@ function ensureIncludesDefault(variants) {
24
24
25
25
const defaultVariantGenerators = config => ( {
26
26
default : generateVariantFunction ( ( ) => { } ) ,
27
- 'motion-safe' : generateVariantFunction ( ( { container, separator, modifySelectors } ) => {
28
- const modified = modifySelectors ( ( { selector } ) => {
29
- return buildSelectorVariant ( selector , 'motion-safe' , separator , message => {
30
- throw container . error ( message )
27
+ 'motion-safe' : generateVariantFunction (
28
+ ( { container, separator, modifySelectors } ) => {
29
+ const modified = modifySelectors ( ( { selector } ) => {
30
+ return buildSelectorVariant ( selector , 'motion-safe' , separator , message => {
31
+ throw container . error ( message )
32
+ } )
31
33
} )
32
- } )
33
- const mediaQuery = postcss . atRule ( {
34
- name : 'media' ,
35
- params : '(prefers-reduced-motion: no-preference)' ,
36
- } )
37
- mediaQuery . append ( modified )
38
- container . append ( mediaQuery )
39
- } ) ,
40
- 'motion-reduce' : generateVariantFunction ( ( { container, separator, modifySelectors } ) => {
41
- const modified = modifySelectors ( ( { selector } ) => {
42
- return buildSelectorVariant ( selector , 'motion-reduce' , separator , message => {
43
- throw container . error ( message )
34
+ const mediaQuery = postcss . atRule ( {
35
+ name : 'media' ,
36
+ params : '(prefers-reduced-motion: no-preference)' ,
44
37
} )
45
- } )
46
- const mediaQuery = postcss . atRule ( {
47
- name : 'media' ,
48
- params : '(prefers-reduced-motion: reduce)' ,
49
- } )
50
- mediaQuery . append ( modified )
51
- container . append ( mediaQuery )
52
- } ) ,
38
+ mediaQuery . append ( modified )
39
+ container . append ( mediaQuery )
40
+ } ,
41
+ { unstable_stack : true }
42
+ ) ,
43
+ 'motion-reduce' : generateVariantFunction (
44
+ ( { container, separator, modifySelectors } ) => {
45
+ const modified = modifySelectors ( ( { selector } ) => {
46
+ return buildSelectorVariant ( selector , 'motion-reduce' , separator , message => {
47
+ throw container . error ( message )
48
+ } )
49
+ } )
50
+ const mediaQuery = postcss . atRule ( {
51
+ name : 'media' ,
52
+ params : '(prefers-reduced-motion: reduce)' ,
53
+ } )
54
+ mediaQuery . append ( modified )
55
+ container . append ( mediaQuery )
56
+ } ,
57
+ { unstable_stack : true }
58
+ ) ,
53
59
'group-hover' : generateVariantFunction ( ( { modifySelectors, separator } ) => {
54
60
const parser = selectorParser ( selectors => {
55
61
selectors . walkClasses ( sel => {
@@ -88,9 +94,7 @@ const defaultVariantGenerators = config => ({
88
94
even : generatePseudoClassVariant ( 'nth-child(even)' , 'even' ) ,
89
95
} )
90
96
91
- function prependStackableVariants ( atRule , variants ) {
92
- const stackableVariants = [ 'dark' , 'motion-safe' , 'motion-reduce' ]
93
-
97
+ function prependStackableVariants ( atRule , variants , stackableVariants ) {
94
98
if ( ! _ . some ( variants , v => stackableVariants . includes ( v ) ) ) {
95
99
return variants
96
100
}
@@ -117,6 +121,10 @@ export default function(config, { variantGenerators: pluginVariantGenerators })
117
121
...pluginVariantGenerators ,
118
122
}
119
123
124
+ const stackableVariants = Object . entries ( variantGenerators )
125
+ . filter ( ( [ _variant , { options } ] ) => options . unstable_stack )
126
+ . map ( ( [ variant ] ) => variant )
127
+
120
128
let variantsFound = false
121
129
122
130
do {
@@ -132,15 +140,15 @@ export default function(config, { variantGenerators: pluginVariantGenerators })
132
140
responsiveParent . append ( atRule )
133
141
}
134
142
135
- const remainingVariants = prependStackableVariants ( atRule , variants )
143
+ const remainingVariants = prependStackableVariants ( atRule , variants , stackableVariants )
136
144
137
145
_ . forEach ( _ . without ( ensureIncludesDefault ( remainingVariants ) , 'responsive' ) , variant => {
138
146
if ( ! variantGenerators [ variant ] ) {
139
147
throw new Error (
140
148
`Your config mentions the "${ variant } " variant, but "${ variant } " doesn't appear to be a variant. Did you forget or misconfigure a plugin that supplies that variant?`
141
149
)
142
150
}
143
- variantGenerators [ variant ] ( atRule , config )
151
+ variantGenerators [ variant ] . handler ( atRule , config )
144
152
} )
145
153
146
154
atRule . remove ( )
0 commit comments