@@ -4,16 +4,31 @@ import cloneNodes from '../util/cloneNodes'
44import buildMediaQuery from '../util/buildMediaQuery'
55import buildSelectorVariant from '../util/buildSelectorVariant'
66
7+ function isLayer ( node ) {
8+ if ( Array . isArray ( node ) ) {
9+ return node . length === 1 && isLayer ( node [ 0 ] )
10+ }
11+ return node . type === 'atrule' && node . name === 'layer'
12+ }
13+
14+ function layerNodes ( nodes ) {
15+ return isLayer ( nodes ) ? nodes [ 0 ] . nodes : nodes
16+ }
17+
718export default function ( config ) {
819 return function ( css ) {
9- // Store the `layer` for each responsive at-rule directly on the at-rule for later reference.
20+ // Wrap any `responsive` rules with a copy of their parent `layer` to
21+ // ensure the layer isn't lost when copying to the `screens` location.
1022 css . walkAtRules ( 'layer' , layerAtRule => {
1123 const layer = layerAtRule . params
1224 layerAtRule . walkAtRules ( 'responsive' , responsiveAtRule => {
13- responsiveAtRule . __tailwind = {
14- ...responsiveAtRule . __tailwind ,
15- layer,
16- }
25+ const nestedlayerAtRule = postcss . atRule ( {
26+ name : 'layer' ,
27+ params : layer ,
28+ } )
29+ nestedlayerAtRule . prepend ( responsiveAtRule . nodes )
30+ responsiveAtRule . removeAll ( )
31+ responsiveAtRule . prepend ( nestedlayerAtRule )
1732 } )
1833 } )
1934
@@ -27,7 +42,16 @@ export default function(config) {
2742 css . walkAtRules ( 'responsive' , atRule => {
2843 const nodes = atRule . nodes
2944 responsiveRules . append ( ...cloneNodes ( nodes ) )
30- atRule . before ( nodes )
45+
46+ // If the parent is already a `layer` (this is true for anything coming from
47+ // a plugin, including core plugins) we don't want to create a double nested
48+ // layer, so only insert the layer children. If there is no parent layer,
49+ // preserve the layer information when inserting the nodes.
50+ if ( isLayer ( atRule . parent ) ) {
51+ atRule . before ( layerNodes ( nodes ) )
52+ } else {
53+ atRule . before ( nodes )
54+ }
3155 atRule . remove ( )
3256 } )
3357
0 commit comments