@@ -4,69 +4,79 @@ import cloneNodes from '../util/cloneNodes'
44import buildMediaQuery from '../util/buildMediaQuery'
55import buildSelectorVariant from '../util/buildSelectorVariant'
66
7- function matchesBucket ( atRule , bucket ) {
8- return (
9- atRule . params === bucket ||
10- ( bucket === 'utilities' && ( atRule . params === '' || atRule . params === undefined ) )
11- )
12- }
13-
14- function insertResponsiveRules ( config , css , bucket ) {
15- const {
16- theme : { screens } ,
17- separator,
18- } = config
19- const responsiveRules = postcss . root ( )
20- const finalRules = [ ]
7+ export default function ( config ) {
8+ return function ( css ) {
9+ const {
10+ theme : { screens } ,
11+ separator,
12+ } = config
13+ const responsiveRules = {
14+ components : postcss . root ( ) ,
15+ utilities : postcss . root ( ) ,
16+ }
17+ const finalRules = [ ]
2118
22- css . walkAtRules ( 'responsive' , atRule => {
23- if ( matchesBucket ( atRule , bucket ) ) {
19+ css . walkAtRules ( 'responsive' , atRule => {
20+ const bucket = atRule . params === 'components' ? 'components' : 'utilities'
2421 const nodes = atRule . nodes
25- responsiveRules . append ( ...cloneNodes ( nodes ) )
22+ responsiveRules [ bucket ] . append ( ...cloneNodes ( nodes ) )
2623 atRule . before ( nodes )
2724 atRule . remove ( )
28- }
29- } )
30-
31- _ . keys ( screens ) . forEach ( screen => {
32- const mediaQuery = postcss . atRule ( {
33- name : 'media' ,
34- params : buildMediaQuery ( screens [ screen ] ) ,
3525 } )
3626
37- mediaQuery . append (
38- _ . tap ( responsiveRules . clone ( ) , clonedRoot => {
39- clonedRoot . walkRules ( rule => {
40- rule . selectors = _ . map ( rule . selectors , selector =>
41- buildSelectorVariant ( selector , screen , separator , message => {
42- throw rule . error ( message )
43- } )
44- )
45- } )
27+ _ . keys ( screens ) . forEach ( screen => {
28+ const mediaQuery = postcss . atRule ( {
29+ name : 'media' ,
30+ params : buildMediaQuery ( screens [ screen ] ) ,
4631 } )
47- )
4832
49- finalRules . push ( mediaQuery )
50- } )
33+ mediaQuery . append ( postcss . comment ( { text : 'tailwind start components' } ) )
5134
52- const hasScreenRules = finalRules . some ( i => i . nodes . length !== 0 )
35+ mediaQuery . append (
36+ _ . tap ( responsiveRules . components . clone ( ) , clonedRoot => {
37+ clonedRoot . walkRules ( rule => {
38+ rule . selectors = _ . map ( rule . selectors , selector =>
39+ buildSelectorVariant ( selector , screen , separator , message => {
40+ throw rule . error ( message )
41+ } )
42+ )
43+ } )
44+ } )
45+ )
5346
54- css . walkAtRules ( 'screens' , atRule => {
55- if ( atRule . params !== bucket ) {
56- return
57- }
47+ mediaQuery . append ( postcss . comment ( { text : 'tailwind end components' } ) )
5848
59- if ( hasScreenRules ) {
60- atRule . before ( finalRules )
61- }
49+ mediaQuery . append ( postcss . comment ( { text : 'tailwind start utilities' } ) )
6250
63- atRule . remove ( )
64- } )
65- }
51+ mediaQuery . append (
52+ _ . tap ( responsiveRules . utilities . clone ( ) , clonedRoot => {
53+ clonedRoot . walkRules ( rule => {
54+ rule . selectors = _ . map ( rule . selectors , selector =>
55+ buildSelectorVariant ( selector , screen , separator , message => {
56+ throw rule . error ( message )
57+ } )
58+ )
59+ } )
60+ } )
61+ )
6662
67- export default function ( config ) {
68- return function ( css ) {
69- insertResponsiveRules ( config , css , 'components' )
70- insertResponsiveRules ( config , css , 'utilities' )
63+ mediaQuery . append ( postcss . comment ( { text : 'tailwind end utilities' } ) )
64+
65+ finalRules . push ( mediaQuery )
66+ } )
67+
68+ const hasScreenRules = finalRules . some ( i => i . nodes . length !== 0 )
69+
70+ css . walkAtRules ( 'tailwind' , atRule => {
71+ if ( atRule . params !== 'screens' ) {
72+ return
73+ }
74+
75+ if ( hasScreenRules ) {
76+ atRule . before ( finalRules )
77+ }
78+
79+ atRule . remove ( )
80+ } )
7181 }
7282}
0 commit comments